diff --git a/JS/index.js b/JS/index.js index 36f7586..e462e05 100644 --- a/JS/index.js +++ b/JS/index.js @@ -11,25 +11,18 @@ const defaultOptions = { }, query: { fetchPolicy: 'no-cache', - errorPolicy: 'all', + errorPolicy: 'ignore', }, } -const client = new ApolloClient({ - uri: 'http://10.0.1.167:4000/', - cache: new InMemoryCache(), - link: new createHttpLink({ - uri: 'http://10.0.1.167:4000/' - }), - defaultOptions -}); +let client class iMessageClient { async getMessages (chatId, page) { - console.log(`get messages for caht ID: ${chatId}`) + console.log(`get messages for chat ID: ${chatId}`) let result = await client.query({ query: gql`query getMessages { @@ -56,8 +49,10 @@ class iMessageClient { for (const message of messages) { if (firstMessage) { + messageOutput = `${message.chatter}: ${message.text}` } else { + messageOutput = `${messageOutput}ENDLASTMESSAGE${message.chatter}: ${message.text}` } @@ -70,7 +65,7 @@ class iMessageClient { async sendMessage (chatId, message) { - console.log(`send messages for caht ID: ${chatId} ${message}`) + console.log(`send messages for chat ID: ${chatId} ${message}`) let result = await client.query({ query: gql`query sendMessage { @@ -81,11 +76,9 @@ class iMessageClient { }` }) - let messages = result.data.getMessages + let messages = result.data.sendMessage let messageOutput = `` const maxPerLine = 20000 - console.log(`return messages from send messages:`) - console.log(messages) let firstMessage = true @@ -97,9 +90,11 @@ class iMessageClient { for (const message of messages) { if (firstMessage) { - messageOutput = `${message.chatter}: ` + + messageOutput = `${message.chatter}: ${message.text}` } else { - messageOutput = `${messageOutput}ENDLASTMESSAGE${message.chatter}: ` + + messageOutput = `${messageOutput}ENDLASTMESSAGE${message.chatter}: ${message.text}` } firstMessage = false @@ -136,6 +131,28 @@ class iMessageClient { return friendlyNameStrings } + + setIPAddress (IPAddress) { + + try { + + client = new ApolloClient({ + uri: `${IPAddress}:4000/`, + cache: new InMemoryCache(), + link: new createHttpLink({ + uri: `${IPAddress}:4000/` + }), + defaultOptions + }); + } catch (err) { + console.log(`error instantiating the ApolloClient`) + console.log(err) + + return `failure` + } + + return `success` + } } module.exports = iMessageClient diff --git a/Sample.c b/Sample.c index 8124769..f43b983 100644 --- a/Sample.c +++ b/Sample.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -37,12 +38,12 @@ #define NK_ZERO_COMMAND_MEMORY #define NK_INCLUDE_FIXED_TYPES #define NK_INCLUDE_STANDARD_IO -#define NK_INCLUDE_STANDARD_VARARGS +// #define NK_INCLUDE_STANDARD_VARARGS #define NK_INCLUDE_DEFAULT_ALLOCATOR #define NK_IMPLEMENTATION #define NK_QUICKDRAW_IMPLEMENTATION -#define NK_MEMSET memset -#define NK_MEMCPY memcpy +// #define NK_MEMSET memset +// #define NK_MEMCPY memcpy void aFailed(char *file, int line) { @@ -55,6 +56,9 @@ void aFailed(char *file, int line) { while (true) {} } +int mouse_x; +int mouse_y; + #define NK_ASSERT(e) \ if (!(e)) \ aFailed(__FILE__, __LINE__) @@ -108,28 +112,39 @@ void AlertUser( void ); #define BotRight(aRect) (* (Point *) &(aRect).bottom) // TODO: -// set up coprocessor -// set up imessage service -// new typescript one that responds via graphql endpoints????? -// finish setting up UI (maybe mock data from coprocessor?) -// need UI to start new chat threads -// need function to create new chat + send message in it -// QUESTION should the chat UI be a scrollable panel with labels inside of it so both sides of the conversation can be shown? -// further improve ui performance -- it's close! eliminate more on keyboard events and we'll be fine +// - IN PROGRESS, fix issues related to perf work... need to have nuklear redraw on text scroll, need to hold scroll positions somehow for inactive windows (undo, see what happens?) +// - potential perf gain: float -> integer math +// - potential perf gain: strip unnecessary function calls (which?) +// - get new messages (when?) -- start with on send +// - IN PROGRESS new message window -- needs to blank out messages, then needs fixes on new mac end +// - chat during the day for a few minutes and figure out small issues +// - transfer to mac, get hw setup working +// - start writing blog posts +// - js code needs to split long messages into max length per line, so that they display properly + char jsFunctionResponse[102400]; // Matches MAX_RECEIVE_SIZE - - int haveRun = 0; int chatFriendlyNamesCounter = 0; +int ipAddressSet = 0; +int sendNewChat = 0; char chatFriendlyNames[16][64]; char activeChat[64]; int activeMessageCounter = 0; char activeChatMessages[10][2048]; char box_input_buffer[2048]; +char ip_input_buffer[255]; +char new_message_input_buffer[255]; int box_len; int box_input_len; +int new_message_input_buffer_len; +int ip_input_buffer_len; +int shouldScrollMessages = 0; +int forceRedraw = 2; // this is how many 'iterations' of the UI that we need to see every element for +int messagesScrollBarLocation = 0; +int messageWindowWasDormant = 0; +int coprocessorLoaded = 0; void getMessagesFromjsFunctionResponse() { @@ -168,6 +183,17 @@ void sendMessage() { return; } + + +void sendIPAddressToCoprocessor() { + + char output[2048]; + sprintf(output, "%s", ip_input_buffer); + + callFunctionOnCoprocessor("setIPAddress", output, jsFunctionResponse); + + return; +} // set up function to get messages in current chat // limit to recent messages // figure out pagination?? button on the top that says "get previous chats"? @@ -206,72 +232,235 @@ void getChats() { return; } +Boolean checkCollision(struct nk_rect window) { + // writeSerialPortDebug(boutRefNum, "checkCollision!"); + + // Boolean testout = (window.x < mouse_x && + // window.x + window.w > mouse_x && + // window.y < mouse_y && + // window.y + window.h > mouse_y); + // char str[255]; + // sprintf(str, "what %d", testout); + // writeSerialPortDebug(boutRefNum, str); + + + // if truthy return, mouse is over window! + return (window.x < mouse_x && + window.x + window.w > mouse_x && + window.y < mouse_y && + window.y + window.h > mouse_y); + +} + +struct nk_rect graphql_input_window_size; +struct nk_rect chats_window_size; +struct nk_rect messages_window_size; +struct nk_rect message_input_window_size; + static void boxTest(struct nk_context *ctx) { - if (nk_begin(ctx, "Chats", nk_rect(0, 0, 200, WINDOW_HEIGHT), NK_WINDOW_BORDER)) { + Boolean isMouseHoveringWindow; - getChats(); + // prompt the user for the graphql instance + if (!coprocessorLoaded) { - nk_layout_row_begin(ctx, NK_STATIC, 25, 1); - { - for (int i = 0; i < chatFriendlyNamesCounter; i++) { - nk_layout_row_push(ctx, 175); // 40% wide + if (nk_begin_titled(ctx, "Loading coprocessor services", "Loading coprocessor services", graphql_input_window_size, NK_WINDOW_TITLE|NK_WINDOW_BORDER)) { - if (nk_button_label(ctx, chatFriendlyNames[i])) { + nk_layout_row_begin(ctx, NK_STATIC, 20, 1); + { + nk_layout_row_push(ctx, 200); // 40% wide + nk_label_wrap(ctx, "Please wait"); + } + nk_layout_row_end(ctx); - // writeSerialPortDebug(boutRefNum, "CLICK!"); - // writeSerialPortDebug(boutRefNum, chatFriendlyNames[i]); - sprintf(activeChat, "%s", chatFriendlyNames[i]); - getMessages(activeChat, 0); - // writeSerialPortDebug(boutRefNum, "CLICK complete, enjoy your chat!"); - } - } - } - nk_layout_row_end(ctx); + nk_end(ctx); + } - nk_end(ctx); - } - - if (nk_begin(ctx, "Message Input", nk_rect(200, WINDOW_HEIGHT - 50, 310, 50), NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR)) { - // bottom text input - nk_layout_row_begin(ctx, NK_STATIC, 40, 2); - { - nk_layout_row_push(ctx, 200); // 40% wide - - nk_edit_string(ctx, NK_EDIT_BOX, box_input_buffer, &box_input_len, 2048, nk_filter_default); - - nk_layout_row_push(ctx, 96); // 40% wide - if (nk_button_label(ctx, "send")) { - //fprintf(stdout, "pushed!\n"); - sendMessage(); - } - } - nk_layout_row_end(ctx); - - nk_end(ctx); + return; } - if (nk_begin_titled(ctx, "Message", activeChat, nk_rect(200, 0, 310, WINDOW_HEIGHT - 50), NK_WINDOW_BORDER|NK_WINDOW_TITLE)) { - nk_layout_row_begin(ctx, NK_STATIC, 0, 1); - { - for (int i = 0; i < activeMessageCounter; i++) { - - nk_layout_row_push(ctx, 285); // 40% wide - // message label - // writeSerialPortDebug(boutRefNum, "create label!"); - // writeSerialPortDebug(boutRefNum, activeChatMessages[i]); + // prompt the user for the graphql instance + if (!ipAddressSet) { - nk_label_wrap(ctx, activeChatMessages[i]); + isMouseHoveringWindow = checkCollision(graphql_input_window_size); + + if (isMouseHoveringWindow || forceRedraw) { + + if (nk_begin_titled(ctx, "Enter iMessage GraphQL Server", "Enter iMessage GraphQL Server", graphql_input_window_size, NK_WINDOW_TITLE|NK_WINDOW_BORDER)) { + + nk_layout_row_begin(ctx, NK_STATIC, 20, 1); + { + nk_layout_row_push(ctx, 200); // 40% wide + nk_label_wrap(ctx, "ex: http://127.0.0.1"); + } + nk_layout_row_end(ctx); + + nk_layout_row_begin(ctx, NK_STATIC, 30, 2); + { + nk_layout_row_push(ctx, WINDOW_WIDTH / 2 - 90); // 40% wide + + nk_edit_string(ctx, NK_EDIT_SIMPLE, ip_input_buffer, &ip_input_buffer_len, 2048, nk_filter_default); + + nk_layout_row_push(ctx, 60); // 40% wide + if (nk_button_label(ctx, "save")) { + + ipAddressSet = 1; + forceRedraw = 2; + sendIPAddressToCoprocessor(); + } + } + nk_layout_row_end(ctx); + + nk_end(ctx); } } - nk_layout_row_end(ctx); - nk_end(ctx); + + return; + } + + // prompt the user for new chat + if (sendNewChat) { + + if (nk_begin_titled(ctx, "Enter New Message Recipient", "Enter New Message Recipient", nk_rect(WINDOW_WIDTH / 4, WINDOW_HEIGHT / 4, WINDOW_WIDTH / 2, 120), NK_WINDOW_TITLE|NK_WINDOW_BORDER)) { + + nk_layout_row_begin(ctx, NK_STATIC, 30, 2); + { + nk_layout_row_push(ctx, WINDOW_WIDTH / 2 - 110); // 40% wide + + nk_edit_string(ctx, NK_EDIT_SIMPLE, new_message_input_buffer, &new_message_input_buffer_len, 2048, nk_filter_default); + + nk_layout_row_push(ctx, 80); // 40% wide + if (nk_button_label(ctx, "open chat")) { + + sendNewChat = 0; + forceRedraw = 2; + // sendIPAddressToCoprocessor(); + + sprintf(activeChat, new_message_input_buffer); + } + } + nk_layout_row_end(ctx); + + nk_end(ctx); + } + + return; + } + + isMouseHoveringWindow = checkCollision(chats_window_size); + + if (isMouseHoveringWindow || forceRedraw) { + + if (nk_begin(ctx, "Chats", chats_window_size, NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR)) { + + getChats(); + + nk_layout_row_begin(ctx, NK_STATIC, 25, 1); + { + for (int i = 0; i < chatFriendlyNamesCounter; i++) { + + if (i > 9) { + + continue; + } + + nk_layout_row_push(ctx, 185); // 40% wide + + if (nk_button_label(ctx, chatFriendlyNames[i])) { + + // writeSerialPortDebug(boutRefNum, "CLICK!"); + // writeSerialPortDebug(boutRefNum, chatFriendlyNames[i]); + sprintf(activeChat, "%s", chatFriendlyNames[i]); + getMessages(activeChat, 0); + shouldScrollMessages = 1; + forceRedraw = 2; + // writeSerialPortDebug(boutRefNum, "CLICK complete, enjoy your chat!"); + } + } + } + nk_layout_row_end(ctx); + + nk_end(ctx); + } + } + + isMouseHoveringWindow = checkCollision(message_input_window_size); + + if (isMouseHoveringWindow || forceRedraw) { + + if (nk_begin(ctx, "Message Input", message_input_window_size, NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR)) { + + // bottom text input + nk_layout_row_begin(ctx, NK_STATIC, 40, 2); + { + nk_layout_row_push(ctx, 220); // 40% wide + + nk_edit_string(ctx, NK_EDIT_BOX, box_input_buffer, &box_input_len, 2048, nk_filter_default); + + nk_layout_row_push(ctx, 76); // 40% wide + if (nk_button_label(ctx, "send")) { + //fprintf(stdout, "pushed!\n"); + sendMessage(); + forceRedraw = 2; + } + } + nk_layout_row_end(ctx); + + nk_end(ctx); + } + } + + + isMouseHoveringWindow = checkCollision(messages_window_size); + + if (isMouseHoveringWindow || forceRedraw) { + + + if (nk_begin_titled(ctx, "Message", activeChat, messages_window_size, NK_WINDOW_BORDER|NK_WINDOW_TITLE)) { + + nk_layout_row_begin(ctx, NK_STATIC, 15, 1); + { + for (int i = 0; i < activeMessageCounter; i++) { + + nk_layout_row_push(ctx, 285); // 40% wide + // message label + writeSerialPortDebug(boutRefNum, "create label!"); + writeSerialPortDebug(boutRefNum, activeChatMessages[i]); + + nk_label_wrap(ctx, activeChatMessages[i]); + } + + if (shouldScrollMessages) { + + ctx->current->scrollbar.y = 10000; + shouldScrollMessages = 0; + } else if (messageWindowWasDormant) { + + ctx->current->scrollbar.y = messagesScrollBarLocation; + } + + messagesScrollBarLocation = ctx->current->scrollbar.y; + + } + + nk_layout_row_end(ctx); + nk_end(ctx); + } + + messageWindowWasDormant = 0; + } else { + + messageWindowWasDormant = 1; } + if (forceRedraw > 0) { + + forceRedraw--; + } } #pragma segment Main @@ -282,12 +471,6 @@ void main() UnloadSeg((Ptr) Initialize); /* note that Initialize must not be in Main! */ - setupCoprocessor("nuklear", "modem"); // could also be "printer", modem is 0 in PCE settings - printer would be 1 - - char programResult[MAX_RECEIVE_SIZE]; - sendProgramToCoprocessor(OUTPUT_JS, programResult); - - nk_quickdraw_init(WINDOW_WIDTH, WINDOW_HEIGHT); struct nk_context *ctx; @@ -296,8 +479,33 @@ void main() // writeSerialPortDebug(boutRefNum, "call nk_init"); #endif + graphql_input_window_size = nk_rect(WINDOW_WIDTH / 4, WINDOW_HEIGHT / 4, WINDOW_WIDTH / 2, 120); + chats_window_size = nk_rect(0, 0, 200, WINDOW_HEIGHT); + messages_window_size = nk_rect(200, 0, 310, WINDOW_HEIGHT - 50); + message_input_window_size = nk_rect(200, WINDOW_HEIGHT - 50, 310, 50); ctx = nk_quickdraw_init(WINDOW_WIDTH, WINDOW_HEIGHT); + // run our nuklear app one time to render the window telling us to be patient for the coprocessor + // app to load up + nk_input_begin(ctx); + nk_input_end(ctx); + boxTest(ctx); + nk_quickdraw_render(FrontWindow(), ctx); + nk_clear(ctx); + SysBeep(1); + + writeSerialPortDebug(boutRefNum, "setupCoprocessor!"); + setupCoprocessor("nuklear", "modem"); // could also be "printer", modem is 0 in PCE settings - printer would be 1 + + char programResult[MAX_RECEIVE_SIZE]; + writeSerialPortDebug(boutRefNum, "sendProgramToCoprocessor!"); + sendProgramToCoprocessor(OUTPUT_JS, programResult); + + coprocessorLoaded = 1; + sprintf(ip_input_buffer, "http://"); + + + #ifdef MAC_APP_DEBUGGING // writeSerialPortDebug(boutRefNum, "call into event loop"); @@ -312,7 +520,9 @@ void EventLoop(struct nk_context *ctx) { RgnHandle cursorRgn; Boolean gotEvent; + Boolean hasNextEvent; EventRecord event; + EventRecord nextEventRecord; Point mouse; cursorRgn = NewRgn(); @@ -334,10 +544,8 @@ void EventLoop(struct nk_context *ctx) // writeSerialPortDebug(boutRefNum, "nk_input_begin complete"); #endif - GetGlobalMouse(&mouse); - // as far as i can tell, there is no way to event on mouse movement with mac libraries, // so we are just going to track on our own, and create our own events. // this seems kind of a bummer to not pass this to event handling code, but to make @@ -359,73 +567,45 @@ void EventLoop(struct nk_context *ctx) beganInput = true; nk_input_begin(ctx); nk_input_motion(ctx, tempPoint.h, tempPoint.v); + + mouse_x = tempPoint.h; + mouse_y = tempPoint.v; } lastMouseHPos = mouse.h; lastMouseVPos = mouse.v; - if (gHasWaitNextEvent) { + SystemTask(); + gotEvent = GetNextEvent(everyEvent, &event); - gotEvent = WaitNextEvent(everyEvent, &event, MAXLONG, cursorRgn); - } else { - - SystemTask(); - gotEvent = GetNextEvent(everyEvent, &event); - } - - long start; - long end; - long total; - long eventTime0; - long eventTime1; - long eventTime2; - long eventTime3; - - start = TickCount(); - if (gotEvent) { + // drain all events before rendering + while (gotEvent) { #ifdef MAC_APP_DEBUGGING - // writeSerialPortDebug(boutRefNum, "calling to DoEvent"); + writeSerialPortDebug(boutRefNum, "calling to DoEvent"); #endif if (!beganInput) { nk_input_begin(ctx); + beganInput = true; } - beganInput = true; - DoEvent(&event, ctx); #ifdef MAC_APP_DEBUGGING - // writeSerialPortDebug(boutRefNum, "done with DoEvent"); + writeSerialPortDebug(boutRefNum, "done with DoEvent"); #endif + + gotEvent = GetNextEvent(everyEvent, &event); } - end = TickCount(); - - total = end - start; - eventTime0 = total;// / 60.0; - start = TickCount(); - #ifdef MAC_APP_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "nk_input_end"); - #endif - - if (beganInput) { + // only re-render if there is an event, prevents screen flickering + if (beganInput || firstOrMouseMove) { nk_input_end(ctx); - } - - #ifdef MAC_APP_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "nk_input_end complete"); - #endif - - // only re-render if there is an event, prevents screen flickering - if (gotEvent || firstOrMouseMove) { firstOrMouseMove = false; @@ -434,36 +614,11 @@ void EventLoop(struct nk_context *ctx) // writeSerialPortDebug(boutRefNum, "nk_quickdraw_render"); #endif + boxTest(ctx); + nk_quickdraw_render(FrontWindow(), ctx); - start = TickCount(); - - //calculator(ctx); - //overview(ctx); - boxTest(ctx); - - - end = TickCount(); - - total = end - start; - eventTime1 = total;// / 60.0; - start = TickCount(); - nk_quickdraw_render(FrontWindow(), ctx); - end = TickCount(); - - total = end - start; - eventTime2 = total;// / 60.0; - start = TickCount(); - nk_clear(ctx); - end = TickCount(); - - total = end - start; - eventTime3 = total;// / 60.0; - start = TickCount(); - - // char logx[255]; - // sprintf(logx, "EventLoop() eventTime0 (handle event) %ld, eventTime1 (nuklear UI) %ld, eventTime2 (render function) %ld, eventTime3 (clear) %ld ticks to execute\n", eventTime0, eventTime1, eventTime2, eventTime3); - // // writeSerialPortDebug(boutRefNum, logx); + nk_clear(ctx); } @@ -775,12 +930,7 @@ void DoMenuCommand(menuResult) handledByDA = SystemEdit(menuItem-1); /* since we donÕt do any Editing */ break; case mLight: - switch ( menuItem ) { - case iStop: - break; - case iGo: - break; - } + sendNewChat = 1; break; case mHelp: diff --git a/Sample.r b/Sample.r index a3232b7..9db4ac4 100644 --- a/Sample.r +++ b/Sample.r @@ -1 +1 @@ -/* # # Apple Macintosh Developer Technical Support # # MultiFinder-Aware Simple Sample Application # # Sample # # Sample.r - Rez Source # # Copyright © 1989 Apple Computer, Inc. # All rights reserved. # # Versions: # 1.00 08/88 # 1.01 11/88 # 1.02 04/89 MPW 3.1 # # Components: # Sample.p April 1, 1989 # Sample.c April 1, 1989 # Sample.a April 1, 1989 # Sample.inc1.a April 1, 1989 # SampleMisc.a April 1, 1989 # Sample.r April 1, 1989 # Sample.h April 1, 1989 # [P]Sample.make April 1, 1989 # [C]Sample.make April 1, 1989 # [A]Sample.make April 1, 1989 # # Sample is an example application that demonstrates how to # initialize the commonly used toolbox managers, operate # successfully under MultiFinder, handle desk accessories, # and create, grow, and zoom windows. # # It does not by any means demonstrate all the techniques # you need for a large application. In particular, Sample # does not cover exception handling, multiple windows/documents, # sophisticated memory management, printing, or undo. All of # these are vital parts of a normal full-sized application. # # This application is an example of the form of a Macintosh # application; it is NOT a template. It is NOT intended to be # used as a foundation for the next world-class, best-selling, # 600K application. A stick figure drawing of the human body may # be a good example of the form for a painting, but that does not # mean it should be used as the basis for the next Mona Lisa. # # We recommend that you review this program or TESample before # beginning a new application. */ #include "Types.r" #include "Sample.h" /* this is a definition for a resource which contains only a rectangle */ type 'RECT' { rect; }; /* we use an MBAR resource to conveniently load all the menus */ resource 'MBAR' (rMenuBar, preload) { { mApple, mFile, mEdit, mLight, mHelp }; /* five menus */ }; resource 'MENU' (mApple, preload) { mApple, textMenuProc, AllItems & ~MenuItem2, /* Disable dashed line, enable About and DAs */ enabled, apple, { "About Sample", noicon, nokey, nomark, plain; "-", noicon, nokey, nomark, plain } }; resource 'MENU' (mFile, preload) { mFile, textMenuProc, MenuItem12, /* enable Quit only, program enables others */ enabled, "File", { "New", noicon, "N", nomark, plain; "Open", noicon, "O", nomark, plain; "-", noicon, nokey, nomark, plain; "Close", noicon, "W", nomark, plain; "Save", noicon, "S", nomark, plain; "Save As", noicon, nokey, nomark, plain; "Revert", noicon, nokey, nomark, plain; "-", noicon, nokey, nomark, plain; "Page Setup", noicon, nokey, nomark, plain; "Print", noicon, nokey, nomark, plain; "-", noicon, nokey, nomark, plain; "Quit", noicon, "Q", nomark, plain } }; resource 'MENU' (mEdit, preload) { mEdit, textMenuProc, NoItems, /* disable everything, program does the enabling */ enabled, "Edit", { "Undo", noicon, "Z", nomark, plain; "-", noicon, nokey, nomark, plain; "Cut", noicon, "X", nomark, plain; "Copy", noicon, "C", nomark, plain; "Paste", noicon, "V", nomark, plain; "Clear", noicon, nokey, nomark, plain } }; resource 'MENU' (mLight, preload) { mLight, textMenuProc, NoItems, /* disable everything, program does the enabling */ enabled, "Traffic", { "Red Light", noicon, nokey, nomark, plain; "Green Light", noicon, nokey, nomark, plain } }; resource 'MENU' (mHelp, preload) { mHelp, textMenuProc, AllItems, /* disable everything, program does the enabling */ enabled, "Help", { "Quick Help", noicon, nokey, nomark, plain; "User Guide", noicon, nokey, nomark, plain; "Test Entry", noicon, nokey, nomark, plain; "Test Entry 2", noicon, nokey, nomark, plain; "Test Entry 3", noicon, nokey, nomark, plain; } }; /* this ALRT and DITL are used as an About screen */ resource 'ALRT' (rAboutAlert, purgeable) { {40, 20, 160, 290}, rAboutAlert, { /* array: 4 elements */ /* [1] */ OK, visible, silent, /* [2] */ OK, visible, silent, /* [3] */ OK, visible, silent, /* [4] */ OK, visible, silent }, centerMainScreen // Where to show the alert }; resource 'DITL' (rAboutAlert, purgeable) { { /* array DITLarray: 5 elements */ /* [1] */ {88, 180, 108, 260}, Button { enabled, "OK" }, /* [2] */ {8, 8, 24, 214}, StaticText { disabled, "Messages for Macintosh" }, /* [3] */ {32, 8, 48, 237}, StaticText { disabled, "Copyright © 2021 Cameron Henlin" }, /* [4] */ {56, 8, 72, 136}, StaticText { disabled, "cam.henlin@gmail.com" }, /* [5] */ {80, 24, 112, 167}, StaticText { disabled, "https://github.com/CamHenlin/MessagesForMacintosh" } } }; /* this ALRT and DITL are used as an error screen */ resource 'ALRT' (rUserAlert, purgeable) { {40, 20, 120, 260}, rUserAlert, { /* array: 4 elements */ /* [1] */ OK, visible, silent, /* [2] */ OK, visible, silent, /* [3] */ OK, visible, silent, /* [4] */ OK, visible, silent }, centerMainScreen // Where to show the alert }; resource 'DITL' (rUserAlert, purgeable) { { /* array DITLarray: 3 elements */ /* [1] */ {50, 150, 70, 230}, Button { enabled, "OK" }, /* [2] */ {10, 60, 30, 230}, StaticText { disabled, "Sample - Error occurred!" }, /* [3] */ {8, 8, 40, 40}, Icon { disabled, 2 } } }; resource 'WIND' (rWindow, preload, purgeable) { {39, 1, 341, 511}, zoomDocProc, visible, noGoAway, 0x0, "Messages", centerMainScreen // Where to show the alert }; resource 'RECT' (rStopRect, preload, purgeable) { {69, 69, 110, 110} }; resource 'RECT' (rXRect, preload, purgeable) { {32, 32, 69, 69} }; resource 'RECT' (rGoRect, preload, purgeable) { {120, 10, 220, 110} }; /* here is the quintessential MultiFinder friendliness device, the SIZE resource */ resource 'SIZE' (-1) { dontSaveScreen, acceptSuspendResumeEvents, enableOptionSwitch, canBackground, /* we can background; we don't currently, but our sleep value */ /* guarantees we don't hog the Mac while we are in the background */ multiFinderAware, /* this says we do our own activate/deactivate; don't fake us out */ backgroundAndForeground, /* this is definitely not a background-only application! */ dontGetFrontClicks, /* change this is if you want "do first click" behavior like the Finder */ ignoreChildDiedEvents, /* essentially, I'm not a debugger (sub-launching) */ not32BitCompatible, /* this app should not be run in 32-bit address space */ reserved, reserved, reserved, reserved, reserved, reserved, reserved, kPrefSize * 1024, kMinSize * 1024 }; data 'PICT' (150) { $"0278 0000 0000 003F 003F 1101 0100 0A00" /* .x.....?.?....�. */ $"0000 0000 3F00 3FA0 0082 A000 8E98 0008" /* ....?.?�.��.��.. */ $"0000 0000 003F 003F 0000 0000 003F 003F" /* .....?.?.....?.? */ $"0000 0000 003F 003F 0000 06FC 0002 3F00" /* .....?.?...�..?. */ $"0006 FC00 02FF C000 07FD 0003 01FF E000" /* ..�..��..�...��. */ $"07FD 0003 03E1 F000 07FD 0003 079E 7800" /* .�...��..�...�x. */ $"07FD 0003 0F61 BC00 07FD 0003 1E80 5E00" /* .�...a�..�...�^. */ $"07FD 0003 3D00 2F00 07FD 0003 7A00 1780" /* .�..=./..�..z..� */ $"07FD 0003 F400 0BC0 08FE 0004 01E8 0005" /* .�..�..�.�...�.. */ $"E008 FE00 0403 D000 02F0 08FE 0004 07A0" /* �.�...�..�.�...� */ $"0001 7808 FE00 040F 4000 00BC 08FE 0004" /* ..x.�...@..�.�.. */ $"1E80 0000 5C08 FE00 003D FE00 005E 08FE" /* .�..\.�..=�..^.� */ $"0000 7AFE 0000 2E08 FE00 00F4 FE00 002E" /* ..z�....�..��... */ $"0903 0000 01E8 FE00 002E 0903 0000 03D0" /* �....��...�....� */ $"FE00 002E 0907 0000 07A0 0100 005E 0907" /* �...�....�...^�. */ $"0000 0F40 0380 005C 0907 0000 1E80 01C0" /* ...@.�.\�....�.� */ $"00BC 0907 0000 3D00 08E0 0178 0907 0000" /* .��...=..�.x�... */ $"7A00 1C70 02F0 0907 0000 F400 0E38 05E0" /* z..p.��...�..8.� */ $"0907 0001 E800 E758 0BC0 0907 0003 D001" /* �...�.�X.��...�. */ $"F388 1780 0907 0007 A003 3810 2F00 0907" /* �.��...�.8./.�. */ $"000F 4002 5C60 5E00 0907 001E 8002 8C00" /* ..@.\`^.�...�.�. */ $"BC00 0907 003D 0010 C801 7800 0907 007A" /* �.�..=..�.x.�..z */ $"0110 F002 F000 0907 00F4 0390 6005 E000" /* ..�.�.�..�.�`.�. */ $"0907 01E8 01D0 000B C000 0907 03D0 00FF" /* �..�.�..�.�..�.� */ $"8017 8000 0905 07A0 1E70 002F FF00 0905" /* �.�.�..�.p./�.�. */ $"0F40 3738 005E FF00 0905 1E80 239C 00BC" /* .@78.^�.�..�#�.� */ $"FF00 0905 3D00 31C8 0178 FF00 0905 7A00" /* �.�.=.1�.x�.�.z. */ $"38C0 02F0 FF00 0905 7400 1C40 05E0 FF00" /* 8�.��.�.t..@.��. */ $"0905 F400 0EC0 0BC0 FF00 0905 E800 0780" /* �.�..�.��.�.�..� */ $"1780 FF00 0800 E8FE 0000 2FFE 0008 00E8" /* .��...��../�...� */ $"FE00 005E FE00 0800 E8FE 0000 BCFE 0008" /* �..^�...��..��.. */ $"04F4 0000 0178 FE00 0804 7400 0002 F0FE" /* .�...x�...t...�� */ $"0008 047A 0000 05E0 FE00 0804 3D00 000B" /* ...z...��...=... */ $"C0FE 0008 041E 8000 1780 FE00 0703 0F40" /* ��....�..��....@ */ $"002F FD00 0703 07A0 005E FD00 0703 03D0" /* ./�....�.^�....� */ $"00BC FD00 0703 01E8 0178 FD00 0703 00F4" /* .��....�.x�....� */ $"02F0 FD00 0703 007B 0DE0 FD00 0703 003C" /* .��....{.��....< */ $"F3C0 FD00 0703 001F 0F80 FD00 0602 000F" /* ���......��..... */ $"FFFC 0006 0200 07FE FC00 0602 0001 F8FC" /* ��.....��.....�� */ $"00A0 008F A000 83FF" /* .�.��.�� */ }; data 'PICT' (153) { $"3B5A 0000 0000 0064 0174 0011 02FF 0C00" /* ;Z.....d.t...�.. */ $"FFFF FFFF 0000 0000 0000 0000 0174 0000" /* ����.........t.. */ $"0064 0000 0000 0000 00A0 0082 001E 0001" /* .d.......�.�.... */ $"000A 0000 0000 0064 0174 0098 8174 0000" /* .�.....d.t.��t.. */ $"0000 0064 0174 0000 0000 0000 0000 0048" /* ...d.t.........H */ $"0000 0048 0000 0000 0008 0001 0008 0000" /* ...H............ */ $"0000 0000 3438 0000 0000 0000 4E0D 8000" /* ....48......N.�. */ $"00FF 0000 FFFF FFFF FFFF 0000 FFFF FFFF" /* .�..������..���� */ $"CCCC 0000 FFFF FFFF 9999 0000 FFFF FFFF" /* ��..������..���� */ $"6666 0000 FFFF FFFF 3333 0000 FFFF FFFF" /* ff..����33..���� */ $"0000 0000 FFFF CCCC FFFF 0000 FFFF CCCC" /* ....������..���� */ $"CCCC 0000 FFFF CCCC 9999 0000 FFFF CCCC" /* ��..���̙�..���� */ $"6666 0000 FFFF CCCC 3333 0000 FFFF CCCC" /* ff..����33..���� */ $"0000 0000 FFFF 9999 FFFF 0000 FFFF 9999" /* ....������..���� */ $"CCCC 0000 FFFF 9999 9999 0000 FFFF 9999" /* ��..������..���� */ $"6666 0000 FFFF 9999 3333 0000 FFFF 9999" /* ff..����33..���� */ $"0000 0000 FFFF 6666 FFFF 0000 FFFF 6666" /* ....��ff��..��ff */ $"CCCC 0000 FFFF 6666 9999 0000 FFFF 6666" /* ��..��ff��..��ff */ $"6666 0000 FFFF 6666 3333 0000 FFFF 6666" /* ff..��ff33..��ff */ $"0000 0000 FFFF 3333 FFFF 0000 FFFF 3333" /* ....��33��..��33 */ $"CCCC 0000 FFFF 3333 9999 0000 FFFF 3333" /* ��..��33��..��33 */ $"6666 0000 FFFF 3333 3333 0000 FFFF 3333" /* ff..��3333..��33 */ $"0000 0000 FFFF 0000 FFFF 0000 FFFF 0000" /* ....��..��..��.. */ $"CCCC 0000 FFFF 0000 9999 0000 FFFF 0000" /* ��..��..��..��.. */ $"6666 0000 FFFF 0000 3333 0000 FFFF 0000" /* ff..��..33..��.. */ $"0000 0000 CCCC FFFF FFFF 0000 CCCC FFFF" /* ....������..���� */ $"CCCC 0000 CCCC FFFF 9999 0000 CCCC FFFF" /* ��..������..���� */ $"6666 0000 CCCC FFFF 3333 0000 CCCC FFFF" /* ff..����33..���� */ $"0000 0000 CCCC CCCC FFFF 0000 CCCC CCCC" /* ....������..���� */ $"CCCC 0000 CCCC CCCC 9999 0000 CCCC CCCC" /* ��..���̙�..���� */ $"6666 0000 CCCC CCCC 3333 0000 CCCC CCCC" /* ff..����33..���� */ $"0000 0000 CCCC 9999 FFFF 0000 CCCC 9999" /* ....�̙���..�̙� */ $"CCCC 0000 CCCC 9999 9999 0000 CCCC 9999" /* ��..�̙���..�̙� */ $"6666 0000 CCCC 9999 3333 0000 CCCC 9999" /* ff..�̙�33..�̙� */ $"0000 0000 CCCC 6666 FFFF 0000 CCCC 6666" /* ....��ff��..��ff */ $"CCCC 0000 CCCC 6666 9999 0000 CCCC 6666" /* ��..��ff��..��ff */ $"6666 0000 CCCC 6666 3333 0000 CCCC 6666" /* ff..��ff33..��ff */ $"0000 0000 CCCC 3333 FFFF 0000 CCCC 3333" /* ....��33��..��33 */ $"CCCC 0000 CCCC 3333 9999 0000 CCCC 3333" /* ��..��33��..��33 */ $"6666 0000 CCCC 3333 3333 0000 CCCC 3333" /* ff..��3333..��33 */ $"0000 0000 CCCC 0000 FFFF 0000 CCCC 0000" /* ....��..��..��.. */ $"CCCC 0000 CCCC 0000 9999 0000 CCCC 0000" /* ��..��..��..��.. */ $"6666 0000 CCCC 0000 3333 0000 CCCC 0000" /* ff..��..33..��.. */ $"0000 0000 9999 FFFF FFFF 0000 9999 FFFF" /* ....������..���� */ $"CCCC 0000 9999 FFFF 9999 0000 9999 FFFF" /* ��..������..���� */ $"6666 0000 9999 FFFF 3333 0000 9999 FFFF" /* ff..����33..���� */ $"0000 0000 9999 CCCC FFFF 0000 9999 CCCC" /* ....������..���� */ $"CCCC 0000 9999 CCCC 9999 0000 9999 CCCC" /* ��..���̙�..���� */ $"6666 0000 9999 CCCC 3333 0000 9999 CCCC" /* ff..����33..���� */ $"0000 0000 9999 9999 FFFF 0000 9999 9999" /* ....������..���� */ $"CCCC 0000 9999 9999 9999 0000 9999 9999" /* ��..������..���� */ $"6666 0000 9999 9999 3333 0000 9999 9999" /* ff..����33..���� */ $"0000 0000 9999 6666 FFFF 0000 9999 6666" /* ....��ff��..��ff */ $"CCCC 0000 9999 6666 9999 0000 9999 6666" /* ��..��ff��..��ff */ $"6666 0000 9999 6666 3333 0000 9999 6666" /* ff..��ff33..��ff */ $"0000 0000 9999 3333 FFFF 0000 9999 3333" /* ....��33��..��33 */ $"CCCC 0000 9999 3333 9999 0000 9999 3333" /* ��..��33��..��33 */ $"6666 0000 9999 3333 3333 0000 9999 3333" /* ff..��3333..��33 */ $"0000 0000 9999 0000 FFFF 0000 9999 0000" /* ....��..��..��.. */ $"CCCC 0000 9999 0000 9999 0000 9999 0000" /* ��..��..��..��.. */ $"6666 0000 9999 0000 3333 0000 9999 0000" /* ff..��..33..��.. */ $"0000 0000 6666 FFFF FFFF 0000 6666 FFFF" /* ....ff����..ff�� */ $"CCCC 0000 6666 FFFF 9999 0000 6666 FFFF" /* ��..ff����..ff�� */ $"6666 0000 6666 FFFF 3333 0000 6666 FFFF" /* ff..ff��33..ff�� */ $"0000 0000 6666 CCCC FFFF 0000 6666 CCCC" /* ....ff����..ff�� */ $"CCCC 0000 6666 CCCC 9999 0000 6666 CCCC" /* ��..ff�̙�..ff�� */ $"6666 0000 6666 CCCC 3333 0000 6666 CCCC" /* ff..ff��33..ff�� */ $"0000 0000 6666 9999 FFFF 0000 6666 9999" /* ....ff����..ff�� */ $"CCCC 0000 6666 9999 9999 0000 6666 9999" /* ��..ff����..ff�� */ $"6666 0000 6666 9999 3333 0000 6666 9999" /* ff..ff��33..ff�� */ $"0000 0000 6666 6666 FFFF 0000 6666 6666" /* ....ffff��..ffff */ $"CCCC 0000 6666 6666 9999 0000 6666 6666" /* ��..ffff��..ffff */ $"6666 0000 6666 6666 3333 0000 6666 6666" /* ff..ffff33..ffff */ $"0000 0000 6666 3333 FFFF 0000 6666 3333" /* ....ff33��..ff33 */ $"CCCC 0000 6666 3333 9999 0000 6666 3333" /* ��..ff33��..ff33 */ $"6666 0000 6666 3333 3333 0000 6666 3333" /* ff..ff3333..ff33 */ $"0000 0000 6666 0000 FFFF 0000 6666 0000" /* ....ff..��..ff.. */ $"CCCC 0000 6666 0000 9999 0000 6666 0000" /* ��..ff..��..ff.. */ $"6666 0000 6666 0000 3333 0000 6666 0000" /* ff..ff..33..ff.. */ $"0000 0000 3333 FFFF FFFF 0000 3333 FFFF" /* ....33����..33�� */ $"CCCC 0000 3333 FFFF 9999 0000 3333 FFFF" /* ��..33����..33�� */ $"6666 0000 3333 FFFF 3333 0000 3333 FFFF" /* ff..33��33..33�� */ $"0000 0000 3333 CCCC FFFF 0000 3333 CCCC" /* ....33����..33�� */ $"CCCC 0000 3333 CCCC 9999 0000 3333 CCCC" /* ��..33�̙�..33�� */ $"6666 0000 3333 CCCC 3333 0000 3333 CCCC" /* ff..33��33..33�� */ $"0000 0000 3333 9999 FFFF 0000 3333 9999" /* ....33����..33�� */ $"CCCC 0000 3333 9999 9999 0000 3333 9999" /* ��..33����..33�� */ $"6666 0000 3333 9999 3333 0000 3333 9999" /* ff..33��33..33�� */ $"0000 0000 3333 6666 FFFF 0000 3333 6666" /* ....33ff��..33ff */ $"CCCC 0000 3333 6666 9999 0000 3333 6666" /* ��..33ff��..33ff */ $"6666 0000 3333 6666 3333 0000 3333 6666" /* ff..33ff33..33ff */ $"0000 0000 3333 3333 FFFF 0000 3333 3333" /* ....3333��..3333 */ $"CCCC 0000 3333 3333 9999 0000 3333 3333" /* ��..3333��..3333 */ $"6666 0000 3333 3333 3333 0000 3333 3333" /* ff..333333..3333 */ $"0000 0000 3333 0000 FFFF 0000 3333 0000" /* ....33..��..33.. */ $"CCCC 0000 3333 0000 9999 0000 3333 0000" /* ��..33..��..33.. */ $"6666 0000 3333 0000 3333 0000 3333 0000" /* ff..33..33..33.. */ $"0000 0000 0000 FFFF FFFF 0000 0000 FFFF" /* ......����....�� */ $"CCCC 0000 0000 FFFF 9999 0000 0000 FFFF" /* ��....����....�� */ $"6666 0000 0000 FFFF 3333 0000 0000 FFFF" /* ff....��33....�� */ $"0000 0000 0000 CCCC FFFF 0000 0000 CCCC" /* ......����....�� */ $"CCCC 0000 0000 CCCC 9999 0000 0000 CCCC" /* ��....�̙�....�� */ $"6666 0000 0000 CCCC 3333 0000 0000 CCCC" /* ff....��33....�� */ $"0000 0000 0000 9999 FFFF 0000 0000 9999" /* ......����....�� */ $"CCCC 0000 0000 9999 9999 0000 0000 9999" /* ��....����....�� */ $"6666 0000 0000 9999 3333 0000 0000 9999" /* ff....��33....�� */ $"0000 0000 0000 6666 FFFF 0000 0000 6666" /* ......ff��....ff */ $"CCCC 0000 0000 6666 9999 0000 0000 6666" /* ��....ff��....ff */ $"6666 0000 0000 6666 3333 0000 0000 6666" /* ff....ff33....ff */ $"0000 0000 0000 3333 FFFF 0000 0000 3333" /* ......33��....33 */ $"CCCC 0000 0000 3333 9999 0000 0000 3333" /* ��....33��....33 */ $"6666 0000 0000 3333 3333 0000 0000 3333" /* ff....3333....33 */ $"0000 0000 0000 0000 FFFF 0000 0000 0000" /* ........��...... */ $"CCCC 0000 0000 0000 9999 0000 0000 0000" /* ��......��...... */ $"6666 0000 0000 0000 3333 0000 EEEE 0000" /* ff......33..��.. */ $"0000 0000 DDDD 0000 0000 0000 BBBB 0000" /* ....��......��.. */ $"0000 0000 AAAA 0000 0000 0000 8888 0000" /* ....��......��.. */ $"0000 0000 7777 0000 0000 0000 5555 0000" /* ....ww......UU.. */ $"0000 0000 4444 0000 0000 0000 2222 0000" /* ....DD......"".. */ $"0000 0000 1111 0000 0000 0000 0000 EEEE" /* ..............�� */ $"0000 0000 0000 DDDD 0000 0000 0000 BBBB" /* ......��......�� */ $"0000 0000 0000 AAAA 0000 0000 0000 8888" /* ......��......�� */ $"0000 0000 0000 7777 0000 0000 0000 5555" /* ......ww......UU */ $"0000 0000 0000 4444 0000 0000 0000 2222" /* ......DD......"" */ $"0000 0000 0000 1111 0000 0000 0000 0000" /* ................ */ $"EEEE 0000 0000 0000 DDDD 0000 0000 0000" /* ��......��...... */ $"BBBB 0000 0000 0000 AAAA 0000 0000 0000" /* ��......��...... */ $"8888 0000 0000 0000 7777 0000 0000 0000" /* ��......ww...... */ $"5555 0000 0000 0000 4444 0000 0000 0000" /* UU......DD...... */ $"2222 0000 0000 0000 1111 0000 EEEE EEEE" /* ""..........���� */ $"EEEE 0000 DDDD DDDD DDDD 0000 BBBB BBBB" /* ��..������..���� */ $"BBBB 0000 AAAA AAAA AAAA 0000 8888 8888" /* ��..������..���� */ $"8888 0000 7777 7777 7777 0000 5555 5555" /* ��..wwwwww..UUUU */ $"5555 0000 4444 4444 4444 0000 2222 2222" /* UU..DDDDDD.."""" */ $"2222 0000 1111 1111 1111 0000 0000 0000" /* "".............. */ $"0000 0000 0000 0064 0174 0000 0000 0064" /* .......d.t.....d */ $"0174 0000 0006 810A 810A 8D0A 0026 E10A" /* .t....��.&�� */ $"02FF ACFF D90A FC22 F80A 0122 22DF 0A05" /* .������"��.""��. */ $"2222 0A0A 2222 F10A 0122 22F2 0A01 2222" /* ""��""��.""��."" */ $"810A B30A 0029 E20A 0481 ACFE FFFF DA0A" /* �³�.)��.������� */ $"0122 22F5 0A01 2222 DF0A 0522 220A 0A22" /* .""��.""��.""��" */ $"22F1 0A01 2222 F20A 0122 2281 0AB3 0A00" /* "��.""��.""�³�. */ $"5EE5 0A08 F9F9 ACAC FDFF ACFF 2BDB 0A01" /* ^��.��������+��. */ $"2222 FD0A 0622 220A 0A22 220A FD22 000A" /* ""��.""��""��".� */ $"FC22 010A 0AFE 2201 0A0A FA22 FE0A FE22" /* �".���".���"���" */ $"FB0A FD22 000A FD22 FE0A FE22 010A 0AFD" /* ���".��"���".��� */ $"2208 0A0A 2222 0A22 220A 0AFD 22FC 0AFD" /* ".��""�""���"��� */ $"2201 0A0A FE22 FD0A 0122 2281 0ABF 0A00" /* ".���"��.""�¿�. */ $"64E5 0A09 FFFE FDFF FAFF FBFF F8FF DC0A" /* d��������������� */ $"FD22 FE0A FD22 FE0A 0322 220A 0AFE 22FE" /* �"���"��.""���"� */ $"0A13 2222 0A22 220A 2222 0A22 220A 2222" /* �.""�""�""�""�"" */ $"0A22 220A 2222 FB0A 0822 220A 0A22 220A" /* �""�""��.""��""� */ $"2222 FD0A 0822 220A 2222 0A22 220A FD22" /* ""��.""�""�""��" */ $"030A 0A22 22F8 0A08 2222 0A0A 2222 0A22" /* .��""��.""��""�" */ $"2281 0ABA 0A00 64E6 0A0E FDFD FFFE 56FE" /* "�º�.d��.����V� */ $"F9F9 FA56 F8F7 FFFF 81E0 0A01 2222 FB0A" /* ���V�������.""�� */ $"0122 22FD 0A05 2222 0A0A 2222 FD0A FC22" /* .""��.""��""���" */ $"090A 2222 0A22 220A 2222 0AFC 22FB 0A0A" /* ��""�""�""��"��� */ $"2222 0A0A 2222 0A22 220A 0AFD 2206 0A22" /* ""��""�""���".�" */ $"220A 2222 0AFE 22FD 0AFE 22FA 0A08 2222" /* "�""��"���"��."" */ $"0A0A 2222 0A22 2281 0ABA 0A00 67E7 0A08" /* ��""�""�º�.g��. */ $"FFFF FEFB FBFF ACF9 F8FE F902 56F9 F8DF" /* �����������.V��� */ $"0A01 2222 FC0A FD22 FE0A 0522 220A 0A22" /* �.""���"��.""��" */ $"22FD 0A01 2222 FD0A 0A22 220A 2222 0A22" /* "��.""���""�""�" */ $"220A 2222 F80A 1522 220A 0A22 220A 2222" /* "�""��.""��""�"" */ $"0A22 220A 2222 0A22 220A 2222 0AFD 22FC" /* �""�""�""�""��"� */ $"0A01 2222 FB0A 0822 220A 0A22 220A 2222" /* �.""��.""��""�"" */ $"810A BA0A 006C E80A 10FD FFFF ACFC FFFD" /* �º�.l��.������� */ $"F956 F9F7 FAF9 F9FF 56FF E00A FC22 060A" /* �V������V����".� */ $"2222 0A0A 2222 FE0A 0422 220A 2222 FC0A" /* ""��""��.""�""�� */ $"FE22 0B0A 0A22 220A 2222 0A22 220A 0AFE" /* �".��""�""�""��� */ $"22F9 0A09 2222 0A22 220A 2222 0A0A FD22" /* "���""�""�""���" */ $"0C0A 2222 0A22 220A 2222 0A22 220A FD22" /* .�""�""�""�""��" */ $"F90A 0322 220A 0AFE 22FD 0A01 2222 810A" /* ��.""���"��.""�� */ $"BF0A 001B E90A 00FE FEFF 02FC FFFF FEF9" /* ��..��.���.����� */ $"0756 F956 56F8 ACFF FF81 0A81 0AB7 0A00" /* .V�VV�����·�. */ $"1EEA 0A12 FDFE FFFF FDFE FFFE F9F9 81F9" /* .��.������������ */ $"F8FA FAF7 F8FF FF81 0AB7 0AFE 2284 0A00" /* ��������·��"��. */ $"73EA 0A00 FEFE FF0F FCFF FFFE F9FA F9F9" /* s��.���.�������� */ $"FAFB FFFC F9FC FFFF C70A FC22 F30A FE22" /* �����������"���" */ $"FC0A FC22 030A 0A22 22EA 0AFD 22FE 0A01" /* ���".��""���"��. */ $"2222 E70A FD22 F90A FE22 000A FE22 030A" /* ""���"���".��".� */ $"0A22 22E8 0A04 2222 0A22 22FA 0A01 2222" /* �""��.""�""��."" */ $"FD0A 0122 22F1 0A01 2222 FC0A 0522 220A" /* ��.""��.""��.""� */ $"0A22 22F3 0A01 2222 EC0A 0122 22F8 0A01" /* �""��.""��.""��. */ $"2222 E30A 0076 EA0A FDFF 0FFC FEFF ACF9" /* ""��.v����.����� */ $"FAF9 FAFB FBFF FFFA FFFE FFC7 0A05 2222" /* �������������."" */ $"0A0A 2222 F30A 0122 22FC 0A01 2222 E40A" /* ��""��.""��.""�� */ $"0922 220A 0A22 220A 0A22 22E8 0A05 2222" /* �""��""��""��."" */ $"0A0A 2222 F90A 0522 220A 0A22 22E4 0AFD" /* ��""��.""��""��� */ $"220F 0A0A 040A 040A 040A 2222 040A 040A" /* ".��.�.�.�"".�.� */ $"2222 F10A 0122 22FC 0A05 2222 0A0A 2222" /* ""��.""��.""��"" */ $"F30A 0122 22EC 0A01 2222 D80A 00E0 EB0A" /* ��.""��.""��.��� */ $"14FD FEFF FFAC FBAC FFFC AC56 F9FA FAFB" /* .����������V���� */ $"FFFF ACFB FFFF C70A 0722 220A 0A22 220A" /* ��������.""��""� */ $"0AFE 220A 0A0A 2222 0A22 220A 0A22 22FC" /* ��"���""�""��""� */ $"0A01 2222 FD0A FE22 000A FD22 010A 0AFD" /* �.""���".��".��� */ $"22F6 0A01 2222 FC0A FD22 010A 0AFE 2209" /* "��.""���".���"� */ $"0A0A 2222 0A0A 2222 0A0A FE22 FB0A 0122" /* ��""��""���"��." */ $"22FC 0A0D 2222 0A22 220A 0A22 220A 0A22" /* "��.""�""��""��" */ $"220A FE22 080A 2222 0A0A 2222 0A0A FE22" /* "��".�""��""���" */ $"010A 0AFD 22F9 0A0B 2222 040A 040A 040A" /* .���"��."".�.�.� */ $"040A 040A FB22 0204 0A0A FE22 010A 0AFC" /* .�.��"..���".��� */ $"2201 0A0A FD22 FC0A 0722 220A 0A22 220A" /* ".���"��.""��""� */ $"0AFE 2201 0A0A FC22 000A FD22 010A 0AFE" /* ��".���".��".��� */ $"2201 0A0A FD22 FE0A FD22 000A FD22 010A" /* ".���"���".��".� */ $"0AFE 2201 0A0A FE22 000A FD22 E80A 00E0" /* ��".���".��"��.� */ $"EB0A 14AC FBFF FFFA FFFD FC56 ACFF FDF9" /* ��.��������V���� */ $"FBAC FFFF FEF9 FFFF C70A FC22 FC0A 0B22" /* �����������"��." */ $"220A 2222 0A22 220A 0A22 22FC 0AFD 22FE" /* "�""�""��""���"� */ $"0A0D 2222 0A22 220A 2222 0A22 220A 2222" /* �.""�""�""�""�"" */ $"F60A FD22 FE0A 0A22 220A 0A22 220A 2222" /* ���"���""��""�"" */ $"0A0A FD22 060A 0A22 220A 2222 FB0A FD22" /* ���".��""�""���" */ $"140A 0A22 220A 2222 0A0A 2222 0A0A 2222" /* .��""�""��""��"" */ $"0A0A 2222 0A0A FD22 FC0A 0722 220A 2222" /* ��""���"��.""�"" */ $"0A22 22FD 0A01 040A FB22 0604 0A04 0A04" /* �""��..��"..�.�. */ $"0A04 FB22 070A 040A 040A 2222 0AFE 22FE" /* �.�".�.�.�""��"� */ $"0A04 2222 0A22 22FC 0AFB 22FD 0A02 2222" /* �.""�""���"��."" */ $"0AFE 22FD 0A11 2222 0A0A 2222 0A22 220A" /* ��"��.""��""�""� */ $"2222 0A22 220A 2222 FC0A 1222 220A 0A22" /* ""�""�""��.""��" */ $"220A 2222 0A0A 2222 0A22 220A 2222 E90A" /* "�""��""�""�""�� */ $"00E3 EC0A 14FF AC0A ACFA F8FE FEFF F981" /* .���.��¬������� */ $"FFFE 56FC FEFF FDFD FFFF C60A 0122 22FB" /* ��V���������.""� */ $"0AFD 2209 0A22 220A 2222 0A0A 2222 FC0A" /* ��"��""�""��""�� */ $"0122 22FC 0A0D 2222 0A22 220A 2222 0A22" /* .""��.""�""�""�" */ $"220A 2222 F30A 0722 220A 0A22 220A 0AFC" /* "�""��.""��""��� */ $"2201 0A0A FD22 010A 0AFC 22F8 0A15 2222" /* ".���".���"��."" */ $"0A22 220A 2222 0A0A 2222 0A0A 2222 0A0A" /* �""�""��""��""�� */ $"2222 0A0A FD22 FE0A FD22 050A 2222 0A22" /* ""���"���".�""�" */ $"22FE 0A10 040A 2222 040A 2222 040A 040A" /* "��..�"".�"".�.� */ $"040A 040A 04FD 2203 0A04 0A04 FD22 020A" /* .�.�.�".�.�.�".� */ $"2222 FD0A 0422 220A 2222 FC0A 0722 220A" /* ""��.""�""��.""� */ $"0A22 220A 0AFD 2202 0A22 22FC 0A03 2222" /* �""���".�""��."" */ $"0A0A FC22 070A 2222 0A22 220A 0AFE 22FE" /* ���".�""�""���"� */ $"0A03 2222 0A0A FC22 090A 0A22 220A 2222" /* �.""���"���""�"" */ $"0A22 22E9 0A00 F5ED 0A15 FFFC 0AFA FFFA" /* �""��.���.������ */ $"FDFE FFAC F9FF FFFE FEFF FAFB FCFD FDFF" /* ���������������� */ $"C60A 0122 22FC 0A0E 2222 0A22 220A 2222" /* ��.""��.""�""�"" */ $"0A22 220A 0A22 22FC 0A01 2222 FC0A 0D22" /* �""��""��.""��." */ $"220A 2222 0A22 220A 2222 0A22 22F7 0A0D" /* "�""�""�""�""��. */ $"2222 0A0A 2222 0A0A 2222 0A0A 2222 FB0A" /* ""��""��""��""�� */ $"0122 22FE 0A01 2222 F90A 1722 220A 0A22" /* .""��.""��.""��" */ $"220A 2222 0A22 220A 0A22 220A 0A22 220A" /* "�""�""��""��""� */ $"0A22 22FE 0A01 2222 FE0A 1222 220A 2222" /* �""��.""��.""�"" */ $"0A22 220A 2222 040A 040A 0422 220A FD22" /* �""�"".�.�.""��" */ $"0704 0A04 0A04 0A04 0AFD 220A 040A 0422" /* ..�.�.�.��"�.�." */ $"220A 2222 0422 22FD 0A04 2222 0A22 22FC" /* "�"".""��.""�""� */ $"0A0E 2222 0A0A 2222 0A22 220A 2222 0A22" /* �.""��""�""�""�" */ $"22FC 0A05 2222 0A0A 2222 FD0A 0422 220A" /* "��.""��""��.""� */ $"2222 FD0A 0922 220A 0A22 220A 0A22 22FC" /* ""���""��""��""� */ $"0A07 2222 0A22 220A 2222 E90A 00E1 EB0A" /* �.""�""�""��.��� */ $"13FB FFFE F72B 81F7 F8FA FDFC F8FF FDFA" /* .����+���������� */ $"FFFF FDFF FFC6 0A01 2222 FB0A FD22 010A" /* �������.""���".� */ $"0AFD 2203 0A0A 2222 FC0A 0122 22FC 0A0D" /* ��".��""��.""��. */ $"2222 0A22 220A 2222 0A22 220A 2222 FE0A" /* ""�""�""�""�""�� */ $"0122 22FB 0AFD 22FD 0A03 2222 0A0A FE22" /* .""���"��.""���" */ $"FD0A 0122 22FD 0AFE 22FA 0AFD 22FE 0AFD" /* ��.""���"���"��� */ $"220B 0A0A 2222 0A0A 2222 0A0A 2222 FE0A" /* ".��""��""��""�� */ $"0122 22FD 0AFD 220B 0A22 220A 2222 0A04" /* .""���".�""�""�. */ $"0A04 0A04 FE22 0A04 0A22 2204 0A04 0A04" /* �.�.�"�.�"".�.�. */ $"0A04 FD22 030A 040A 04FD 2203 0A22 2204" /* �.�".�.�.�".�"". */ $"FD0A FD22 FC0A 0722 220A 0A22 220A 0AFD" /* ���"��.""��""��� */ $"2202 0A22 22FB 0A03 2222 0A0A FE22 070A" /* ".�""��.""���".� */ $"0A22 220A 2222 0AFD 22FD 0A03 2222 0A0A" /* �""�""��"��.""�� */ $"FE22 FE0A 0722 220A 2222 0A22 22E9 0A00" /* �"��.""�""�""��. */ $"48EB 0A0D FF0A FDF7 FE56 F7F7 5656 ACF8" /* H��.�����V��VV�� */ $"F8F9 FDFF 02F9 00FF 940A 0122 22B0 0A26" /* ����.�.���.""��& */ $"040A 040A 040A 040A 040A 040A 040A 040A" /* .�.�.�.�.�.�.�.� */ $"040A 040A 040A 040A 040A 040A 040A 040A" /* .�.�.�.�.�.�.�.� */ $"040A 040A 040A 049F 0A00 2CFB 5FFD 0A04" /* .�.�.�.��.,�_��. */ $"ACFF FEFE FFF8 0A13 FD56 FCF9 5656 FAF9" /* �������.�V��VV�� */ $"F7F8 F7F7 FE81 81AC FAF5 00FF FE0A 995F" /* ����������.��™_ */ $"0122 2281 5FA6 5F00 31FC 5FFD 0A06 FFFA" /* .""�_�_.1�_��.�� */ $"FA81 F8F9 FFFE FD19 FFFF FE0A 0AFF 56FB" /* �������.������V� */ $"F9F9 F8F9 FBF9 F7F7 F8F8 F7F8 FDF7 F5FC" /* ���������������� */ $"FFFF FE0A 815F 815F BD5F 0034 FD5F FE0A" /* ���_�_�_.4�_�� */ $"11FE 56FF F9F8 81FD F7FE FFAC FC81 56F7" /* .�V�����������V� */ $"FAFB 81FE 5611 F756 FDAC 56F8 F8F7 F981" /* ����V.�V��V����� */ $"FCF9 F6F9 FCF6 2BFF FE0A 815F 815F BE5F" /* ������+��_�_�_ */ $"005A FA0A 27FC FFF9 F9F8 F756 81FF FCFA" /* .Z��'������V���� */ $"FBFA F8F7 ACF8 FDFF F956 56F8 F856 56F8" /* ���������VV��VV� */ $"F82B ACFD 56F5 F5FD F7F5 F52B F5FC 0AC0" /* �+��V������+���� */ $"10E0 0AEE 10B0 0A0D 040A 040A 040A 040A" /* .���.��..�.�.�.� */ $"040A 040A 040A EB02 0C04 0A04 0A04 0A04" /* .�.�.��...�.�.�. */ $"0A04 0A04 0A04 D70A F710 EC0A 0056 FA0A" /* �.�.�.���.��.V�� */ $"29FC FFF9 56F8 F8FD FA81 FAFF F9FC F9F8" /* )���V����������� */ $"F7F7 81F8 FDF8 FAF9 F856 56F8 F7F9 FD2B" /* ���������VV����+ */ $"F600 FCFB F5F9 F9F6 56F5 FFBC 10E1 0AE2" /* �.������V���.��� */ $"10BB 0A0A 040A 040A 040A 040A 040A 04E7" /* .���.�.�.�.�.�.� */ $"020B 0A04 0A04 0A04 0A04 0A04 0A04 DA0A" /* ..�.�.�.�.�.�.�� */ $"F410 ED0A 0058 F90A 25FE FBF8 5656 81F9" /* �.��.X��%���VV�� */ $"F9FD AC81 FE81 F9F8 F7F7 F8FA FEAC FEFC" /* ���������������� */ $"FAF9 F7FA FEF7 F62B 81FE F8FB FBF7 2BFE" /* �������+������+� */ $"F6BA 10E4 0ADF 10BE 0A09 040A 040A 040A" /* ��.���.���.�.�.� */ $"040A 040A F702 F701 F702 0A04 0A04 0A04" /* .�.��.�.�.�.�.�. */ $"0A04 0A04 0A04 DB0A F310 EF0A 0010 005E" /* �.�.�.���.��...^ */ $"0010 FA0A 0EFB FD56 F8F9 FCAC FB81 81AC" /* ..��.��V�������� */ $"FCFB AC81 FDF8 FEF7 0CF9 FFFC FEFF FEFC" /* ��������.������� */ $"F8AC FDFC FCF8 FEF6 03FA ACF7 FFB8 10E9" /* ��������.�����.� */ $"0ADC 10D8 0AF5 10F5 0A09 040A 040A 040A" /* ��.���.���.�.�.� */ $"040A 040A F902 F101 F902 0A04 0A04 0A04" /* .�.��.�.�.�.�.�. */ $"0A04 0A04 0A04 DD0A F010 F30A FE10 0059" /* �.�.�.���.���..Y */ $"F810 0DFF FFFE FCFB F9FB FDFF F9FA F9F8" /* �..������������� */ $"FCFC 5615 F8F7 F8FF F9F7 5656 FCFB FDFC" /* ��V.������VV���� */ $"2BF9 FEAC FFAC F6F7 F62B 8110 F910 DC0A" /* +��������+�.�.�� */ $"F210 F70A 0904 0A04 0A04 0A04 0A04 0AFA" /* �.���.�.�.�.�.�� */ $"02ED 01FA 020A 040A 040A 040A 040A 040A" /* .�.�.�.�.�.�.�.� */ $"04E0 0AEC 10F7 0AFC 1000 61F9 102A FCFD" /* .���.���..a�.*�� */ $"F981 FD81 FBFC 81FD F9FC FFF7 FDF9 F9FA" /* ���������������� */ $"F9F8 F8F9 FCF9 F7F8 F7F7 F8F9 81FB F900" /* ���������������. */ $"F8FA F52B F72B 2BFF 5681 10C5 10F9 0A09" /* ���+�++�V�.�.��� */ $"040A 040A 040A 040A 040A FB02 E901 FB02" /* .�.�.�.�.��.�.�. */ $"0A04 0A04 0A04 0A04 0A04 0A04 F60A 0234" /* �.�.�.�.�.�.��.4 */ $"5F5F FE89 0265 5F34 F60A DC10 005C F910" /* __��.e_4���..\�. */ $"00FF FEF8 0AFB AC56 56FA FBF9 81F9 56FE" /* .������VV�����V� */ $"FEF9 FE56 15FC FE56 F7F8 F8F7 F856 F7FB" /* ���V.��V�����V�� */ $"FBF7 0081 81F5 F62B F6F9 FF81 10C3 10FC" /* ��.����+����.�.� */ $"0A09 040A 040A 040A 040A 040A FB02 E701" /* ��.�.�.�.�.��.�. */ $"FB02 0804 0A04 0A04 0A04 0A04 FA0A FE10" /* �...�.�.�.�.���. */ $"003A F789 005F F80A DB10 0052 FA10 0CAC" /* .:��._���..R�..� */ $"FAF8 F8F9 F8FA F9F8 F9FC FEF9 FEAC 1BFA" /* ��������������.� */ $"FAFB FCFB F881 FDF9 F956 F8F7 F8F7 F7F6" /* ���������V������ */ $"FDFC F600 2BF6 F62B F600 FD81 10C2 10FE" /* ���.+��+�.��.�.� */ $"0A09 040A 040A 040A 040A 040A FC02 E301" /* ��.�.�.�.�.��.�. */ $"FC02 F70A FA10 005F F489 FB0A D910 0057" /* �.���.._����..W */ $"FA10 1BAC AC56 F9F9 AC81 F9F8 F9AC FCFB" /* �..��V���������� */ $"81FD FDFA FBAC AC81 81FB FFFF 8156 F8FE" /* �������������V�� */ $"F70C 2BF7 F7FF F7F5 F5F6 F6F5 F52B FF81" /* �.+����������+�� */ $"10C0 1009 0A0A 040A 040A 040A 040A FC02" /* .�.���.�.�.�.��. */ $"E101 FC02 F80A FB10 005F FE89 003A FD10" /* �.�.���.._��.:�. */ $"013A 5FFC 89D4 1000 49FA 1001 FEFF FEF9" /* .:_���..I�..���� */ $"12AC FEAC F9FC FA56 F9F9 FCFC 81FD ACFC" /* .������V�������� */ $"F8FF F7F9 FCFF 0EFE FDFD FCFA FFFC 2BF5" /* ������.�������+� */ $"F5F6 F6F5 56FF 8110 C010 F80A FC02 DF01" /* ����V��.�.���.�. */ $"FC02 F80A FC10 FD89 0065 FA10 FD89 003A" /* �.���.��.e�.��.: */ $"D510 0052 F910 19FF FCFA 81AC ACFA FDFB" /* �..R�..��������� */ $"FA56 FBFA F9FC 81FC FB56 FAFF F8FB ACFC" /* �V�������V������ */ $"81FE F90D FAFA FDAC ACFF FB2B F5F5 F6F7" /* ���.�������+���� */ $"81FF CF10 0016 8110 F310 F80A FC02 DF01" /* ���...�.�.���.�. */ $"FC02 F80A FD10 063A 893A 103A 8989 FA10" /* �.���..:�:.:���. */ $"FE89 003A D510 005F F910 05FE FFFB 81FB" /* ��.:�.._�..����� */ $"FBFE AC0B 56FA FA56 FAFA ACFA FCFB FEF9" /* ���.V��V�������� */ $"FE56 11F9 F956 F7F8 56F8 FCFD FCFC FE81" /* �V.��V��V������� */ $"F7F6 F656 FFD5 1000 16FD 10FC 16C8 1001" /* ���V��...�.�.�.. */ $"3A3A FC5F 013A 3AB8 10F8 0AFC 02DD 01FC" /* ::�_.::�.���.�.� */ $"02F8 0AFE 1001 5F89 FE10 023A 895F FB10" /* .���.._��..:�_�. */ $"035F 8989 3AD5 1000 6BF8 1007 FEFF ACAC" /* ._��:�..k�..���� */ $"FFFE FCF9 FEFA 0AF9 FCFA FCFC 56F9 F9F8" /* ������������V��� */ $"F7F8 FD56 0EF7 F856 FBFB FDFB F9FB FFFB" /* ���V.��V�������� */ $"FAFA FFAC D610 F616 CB10 005F F489 015F" /* �����.�.�.._�._ */ $"3AF9 1000 3AFE 5FFD 8900 5FDE 1001 8989" /* :�..:�_��._�..�� */ $"FE5F 0289 895F F810 F80A FD02 DB01 FD02" /* �_.��_�.���.�.�. */ $"F80A FE10 015F 5FFD 1001 5F89 FA10 0289" /* ���..__�.._��..� */ $"893A D510 005B F710 1481 ACFC FFF9 FAFA" /* �:�..[�..������� */ $"8181 FAFB FDFB FBFC FEF9 2BF8 F8F7 FEF8" /* ����������+����� */ $"0EF7 F7F8 F9FE F9AC FA81 FAFA FBFF FFFD" /* .��������������� */ $"D510 F516 CE10 005F EF89 FA10 F889 DE10" /* �.�.�.._��.���. */ $"F989 003A F910 F90A FC02 DB01 FC02 F90A" /* ��.:�.���.�.�.�� */ $"FE10 015F 65FC 1001 8989 FB10 0189 89D4" /* �.._e�..���..��� */ $"1000 72F4 1011 FEFB FAF9 FBFD ACAC FAAC" /* ..r�..���������� */ $"81FB FDFF F9F8 F856 FDF8 0DF7 2BAC FBFE" /* �������V��.�+��� */ $"F956 FAF9 F9FA F9FD FEDF 1000 16F9 10F2" /* �V��������...�.� */ $"16D2 1000 3AFD 8901 653A FB10 013A 5FFA" /* .�..:��.e:�..:_� */ $"89FB 1600 5FF9 89F7 1000 3AFE 5FEB 1000" /* ��.._���..:�_�.. */ $"65FB 8900 3AFA 10F8 0AFD 02D9 01FD 02F8" /* e��.:�.���.�.�.� */ $"0A03 1010 3A89 FC10 023A 895F FD10 035F" /* �...:��..:�_�.._ */ $"8989 3AD5 1000 78F4 100E FBFE 81FA FCFC" /* ��:�..x�..������ */ $"FBAC FEAC 81FE FAFB FAFE 5600 F8FE F70E" /* ����������V.���. */ $"2BFB FF56 AC56 56F9 56F9 FAFA F9FF FDEC" /* +��V�VV�V������� */ $"1001 1616 F910 FC16 FD10 EC16 D710 005F" /* ....�.�.�.�.�.._ */ $"FE89 005F F710 0116 5FFB 89FA 1600 3AFA" /* ��._�..._���..:� */ $"89FE 16FB 10FB 8900 3AEC 10FB 8900 3AFA" /* ��.�.��.:�.��.:� */ $"10F9 0AFC 02D9 01FC 02F9 0AFE 1001 8965" /* .���.�.�.���..�e */ $"FC10 0565 8989 5F3A 5FFE 8900 3AD5 1000" /* �..e��_:_��.:�.. */ $"6FF3 100C FBFF FBFB FEFF FFFB 562B F9F9" /* o�..��������V+�� */ $"FFFE F913 56F8 F8F7 F7AC FFFB FA81 5681" /* ���.V���������V� */ $"F9F9 FBF9 F9FB FCFF F210 D316 D810 0065" /* ���������.�.�..e */ $"FE89 003A FB10 FB16 003A FC89 005F F916" /* ��.:�.�..:��._�. */ $"003A FB89 FD16 FD10 005F FA89 EC10 005F" /* .:���.�.._���.._ */ $"FC89 003A FA10 F90A FD02 D701 FD02 F90A" /* ��.:�.���.�.�.�� */ $"FE10 025F 8989 FC10 003A FA89 003A D510" /* �.._���..:��.:�. */ $"0066 F110 17FE FFAC FEFF F8F8 FAF9 FFAC" /* .f�..����������� */ $"ACF9 FAF9 F8F7 56FB FA81 FFF9 F8FD 5605" /* ������V�������V. */ $"F856 F9F9 FBFF F410 D016 DA10 005F FE89" /* �V�����.�.�.._�� */ $"003A F416 FC89 0065 F716 FB89 FC16 FE10" /* .:�.��.e�.���.�. */ $"005F FA89 EC10 005F FC89 003A FA10 F90A" /* ._���.._��.:�.�� */ $"FD02 D701 FD02 F90A FD10 0465 8989 655F" /* �.�.�.���..e��e_ */ $"FE3A 005F FB89 D410 0070 F010 0A16 FDFC" /* �:._���..p�.�.�� */ $"ACFD F7F8 FA81 FAFF FDF9 11FC FAAC FD81" /* ����������.����� */ $"FBF8 F781 F7F8 56F9 F9FA F9FE FFFA 10FD" /* ������V�������.� */ $"1602 F9FD FFD1 16E6 10F6 1600 3AFE 8900" /* ..����.�.�..:��. */ $"3AF4 16FC 8900 5FF6 16FB 89FA 1601 1010" /* :�.��._�.���.... */ $"FB89 003A EC10 005F FC89 003A FB10 F80A" /* ��.:�.._��.:�.�� */ $"FD02 D701 FD02 F80A FD10 005F F589 003A" /* �.�.�.���.._��.: */ $"FA10 0016 F910 0016 E510 006F F210 FD16" /* �...�...�..o�.�. */ $"1D81 81F9 FBF8 2BF7 FDFB FD81 FFFA FCFA" /* .�����+��������� */ $"ACF9 FBF9 56F7 FFF9 56F9 81F9 F9FD FEF5" /* ����V���V������� */ $"1603 ACFE F9FF D116 E910 F416 FE89 0065" /* ..�����.�.�.��.e */ $"F516 003A FD89 0065 F416 FB89 F716 033A" /* �..:��.e�.���..: */ $"6565 5FEA 1000 5FFC 8900 3AFB 10F9 0AFD" /* ee_�.._��.:�.��� */ $"02D5 01FD 02F9 0AFB 1000 65F8 8902 3A16" /* .�.�.���..e��.:. */ $"16FD 10FC 16FD 10FC 16E7 1000 64F7 10F8" /* .�.�.�.�.�..d�.� */ $"161C FBFB F681 FF81 F756 FEF8 FAFA FCF9" /* ..�������V������ */ $"81F9 F9FA F9F9 56F9 F8F9 56FA F9FB FFF6" /* ������V���V����� */ $"1606 F9AC FDF8 F7FA FFD0 16F0 10F0 1600" /* ..��������.�.�.. */ $"65FE 89F6 1600 3AFD 8900 65F2 16FB 89DC" /* e���..:��.e�.��� */ $"1600 65FC 8900 3AFB 16F9 10FD 02D5 01FD" /* ..e��.:�.�.�.�.� */ $"02F9 0AFA 1001 163A FD65 015F 3AE0 16F2" /* .���...:�e._:�.� */ $"1000 51EE 160D ACF9 F556 F6FD FF81 FB81" /* ..Q�..���V������ */ $"ACF9 56FB FBF9 0256 F856 FEF9 01AC FFF5" /* ��V���.V�V��.��� */ $"1607 FDFD 56F7 F8F8 81FC AF16 FE89 0065" /* ..��V������.��.e */ $"F716 0065 FE89 0065 F016 FB89 DC16 0065" /* �..e��.e�.���..e */ $"FC89 003A FB16 F910 FD02 D501 FD02 F90A" /* ��.:�.�.�.�.�.�� */ $"FE10 C516 0060 EE16 1AAC F9F6 F5F6 FEAC" /* �.�..`�..������� */ $"ACFE FDFB ACFC FFF9 FAFA 5656 F856 F8F9" /* ����������VV�V�� */ $"FAAC FFFF F416 07FF FB2B F8F8 56F8 FDB0" /* �����..��+��V��� */ $"1600 65FE 8900 3AF9 1600 3AFE 8900 65EE" /* ..e��.:�..:��.e� */ $"16FB 89DC 1600 65FC 8900 3AFB 16F9 10FD" /* .���..e��.:�.�.� */ $"02F4 0100 08FA 0100 08EB 01FD 02F9 10F0" /* .�...�...�.�.�.� */ $"1601 653A D516 008C EE16 12FC 56F6 F5F5" /* ..e:�..��..�V��� */ $"FCFB FEFB FAFA F9FC FCF8 F856 F8F8 FE56" /* �����������V���V */ $"FDFF FE16 0456 16F9 FDFE FDFF 05FE FFFF" /* ���..V.�����.��� */ $"FEFA 2BFE F801 81FF B116 FD89 F916 0365" /* ��+��.���.���..e */ $"8989 5FEC 16FB 89FB 1600 3AFE 8907 653A" /* ��_�.���..:��.e: */ $"3A5F 6589 8965 F716 0065 FE89 0165 3AFE" /* :_e��e�..e��.e:� */ $"1600 65FC 8900 3AFB 16FC 1001 3A5F F789" /* ..e��.:�.�..:_�� */ $"015E 33FD 0100 2CFD 89FE 5EFD 8907 0101" /* .^3�..,���^��... */ $"5782 8989 5E33 F401 FD02 F910 F116 0265" /* W���^3�.�.�.�..e */ $"893A D516 0082 EE16 1CFE 56F5 00F6 FAFF" /* �:�..��..�V�.��� */ $"FBFA 81FC ACFF FDF9 FBFF FEF9 56FA FDAC" /* ������������V��� */ $"FDFE 1616 81FA FEFF 11AC FCFC FBFA F9FB" /* ��..����.������� */ $"FEFD FEFE 56F8 F8F7 F7FB FEB3 1600 3AFD" /* ����V�������..:� */ $"89FB 1603 3A89 8965 EA16 FB89 FB16 0065" /* ��..:��e�.���..e */ $"F689 F916 0065 F989 0265 1665 FC89 003A" /* ���..e��.e.e��.: */ $"FB16 FD10 005F F389 0033 FD01 012C 5EFA" /* �.�.._�.3�..,^� */ $"8902 5E01 08FA 8900 82F5 01FD 02F9 10F5" /* �.^..��.��.�.�.� */ $"1601 3A65 FD89 D416 008E EE16 08FD F8F7" /* ..:e���..��..��� */ $"F7F6 F9FF FBAC FEFE 05F9 FAFD FB56 FEFE" /* ��������.����V�� */ $"FF1C FB81 ACFE 16FE FCFB F956 FAF9 FAAC" /* �.����.����V���� */ $"FBFC 8181 56FF 16FD FEF9 F8F7 F7FA FDB3" /* ����V�.��������� */ $"1600 3AFD 89FC 1603 6589 893A E916 FB89" /* ..:���..e��:�.�� */ $"FA16 0065 F889 003A FA16 FC89 033A 163A" /* �..e��.:�.��.:.: */ $"5FF8 8900 3AFB 16FE 10FB 8903 5E33 3357" /* _��.:�.�.��.^33W */ $"FB89 005E FB01 005E FC89 0282 012C F889" /* ��.^�..^��.�.,�� */ $"0082 F601 FD02 F910 0216 1665 FE89 003A" /* .��.�.�....e��.: */ $"FE16 0065 FA89 D416 0091 EE16 0AFF F8F8" /* �..e���..��.���� */ $"F9F5 F5FC ACFD F8F5 FDF6 13F5 F62B F8FC" /* ����������.��+�� */ $"F856 F9FC FFFD AC56 F9FA FDFE FFFD ACFE" /* �V�����V�������� */ $"F90C FA56 ACFD 16FF FEFA F781 F9FD ACB4" /* �.�V��.��������� */ $"1600 65FD 89FD 1603 3A89 893A E816 FB89" /* ..e���..:��:�.�� */ $"F916 005F FB89 0065 F916 FD89 0065 FB16" /* �.._��.e�.��.e�. */ $"0065 FA89 003A FB16 0110 10FC 8900 5FFD" /* .e��.:�....��._� */ $"0202 0101 82FD 8900 5EFB 0100 33FC 8901" /* ....���.^�..3��. */ $"5E2C F689 002C F701 FD02 F910 0116 3AFC" /* ^,��.,�.�.�...:� */ $"8902 3A16 65F9 8900 3AD5 1600 A3EE 160A" /* �.:.e��.:�..��.� */ $"FFF7 F6F9 F5F5 00F5 F7F7 F8FD F909 2BF6" /* ������.�������+� */ $"F6F7 F8FB FEFF FD81 FEFC 17FB FCFA 5656" /* ����������.���VV */ $"F9F9 56F8 F9F9 FAFA FF16 16FF FEF8 81FC" /* ��V������..����� */ $"2BFD ACB5 16FC 89FD 1603 3A89 8965 FD16" /* +���.���..:��e�. */ $"0065 FE89 0565 3A3A 163A 65FD 89FA 16FB" /* .e��.e::.:e���.� */ $"89F8 16FB 8900 3AFA 1600 65FD 89F9 1601" /* ��.��.:�..e���.. */ $"3A65 FC89 003A FB16 0110 5FFD 8901 5F10" /* :e��.:�..._��._. */ $"FD02 0201 0133 FD89 0033 FB01 0033 F989" /* �....3��.3�..3�� */ $"045E 2C08 2C5E FC89 0033 F701 FD02 F910" /* .^,.,^��.3�.�.�. */ $"0816 3A89 895F 5F89 893A FD89 FC65 D416" /* ..:��__��:���e�. */ $"0096 EE16 17FF F7F5 FBF5 F6F5 F52B F9FC" /* .��..��������+�� */ $"FFFE FEAC F62B F6F8 FDFE FDFB 81FD F902" /* �����+���������. */ $"FEF9 F8FD 5602 F8F7 F8FE F900 FDFE 1607" /* ����V.�����.��.. */ $"FEFD 81F8 F856 FCFF B616 FC89 FD16 003A" /* �����V���.���..: */ $"FE89 0065 FE16 003A F589 0065 FA16 FB89" /* ��.e�..:��.e�.�� */ $"F816 FB89 FA16 003A FD89 0065 F816 0065" /* �.���..:��.e�..e */ $"FC89 003A FB16 0010 FC89 0110 10FD 0202" /* ��.:�...��...�.. */ $"0101 5EFE 8900 82FA 0100 33FB 8900 5EFB" /* ..^��.��..3��.^� */ $"01FC 8900 33F7 01FD 02F9 1002 163A 89FD" /* .��.3�.�.�...:�� */ $"1603 6589 8965 CD16 0090 EE16 04FF 2BF5" /* ..e��e�..��..�+� */ $"8100 FEF5 11FA FFFF ACFC FCFF 2BF6 F7FB" /* �.��.�������+��� */ $"81FD F9FA FA56 56FE F90D FAF9 F8F8 F7F8" /* �����VV��.������ */ $"56F7 F756 FBFA F9FF FE16 07FE ACF8 56F9" /* V��V�����..���V� */ $"F881 FFB7 16FC 89FC 1603 6589 8965 FD16" /* ����.���..e��e�. */ $"003A F789 0065 F916 FB89 F816 FB89 FA16" /* .:��.e�.���.���. */ $"0065 FD89 F716 0065 FC89 003A FB16 005F" /* .e���..e��.:�.._ */ $"FD89 003A FE10 FE02 0109 82FD 89F9 0100" /* ��.:�.�..Ƃ���.. */ $"33FC 8900 5EFA 01FC 89F7 01FD 02F8 1002" /* 3��.^�.���.�.�.. */ $"163A 65FC 1601 8965 CC16 0091 EE16 15FF" /* .:e�..�e�..��..� */ $"2BF5 F9F5 00F6 56FF FBFC FB56 2BFF 2BF6" /* +���.�V����V+�+� */ $"81AC F9FD FAFC F910 FAFA 81FA F9F7 F7F8" /* �������.�������� */ $"56F8 F7F8 FCFA F9AC 81FE 1607 FEFD F9F9" /* V���������..���� */ $"F8F7 ACFC B816 FC89 003A FC16 0165 65FA" /* �����.��.:�..ee� */ $"16F9 8900 65F8 16FB 89F8 16FB 89FA 16FC" /* .��.e�.���.���.� */ $"89F7 1600 65FC 8900 3AFB 16FC 89FD 1002" /* ��..e��.:�.���.. */ $"0202 58FD 8900 5EF8 0100 33FC 8900 5EFB" /* ..X��.^�..3��.^� */ $"0100 33FD 8900 57F7 01FD 02F9 1003 1616" /* ..3��.W�.�.�.... */ $"3A65 FD16 013A 89F9 1600 3AD4 1600 92EE" /* :e�..:��..:�..�� */ $"1616 ACF8 F6F7 56F5 F6F5 FE2B F8F7 F72B" /* ..����V����+���+ */ $"FD56 00FF 81AC FAFE 56FD F900 FAFE 8102" /* �V.�����V��.���. */ $"FAF8 F7FD 5605 F7F9 FAF9 81FE FD16 06FF" /* ����V.�������..� */ $"F9F9 FCF9 F7FF B816 FC89 0065 F316 003A" /* �������.��.e�..: */ $"FA89 F716 FB89 F816 FB89 FB16 003A FD89" /* ���.���.���..:�� */ $"0065 F716 0065 FC89 003A FC16 003A FC89" /* .e�..e��.:�..:�� */ $"FD10 0102 58FE 8900 5EF6 0100 33FC 8900" /* �...X��.^�..3��. */ $"5EFC 0100 08FD 8900 33F6 01FD 02F9 1003" /* ^�...��.3�.�.�.. */ $"1616 3A89 FD16 0189 5FFA 1602 3A89 3AD5" /* ..:��..�_�..:�:� */ $"1600 92EE 161A ACFA 0000 FD00 F500 FDFA" /* ..��..��..�.�.�� */ $"F8F7 F8F7 81FA F6FF 56FF 2BFF FAF8 FFFC" /* ��������V�+����� */ $"F9FE 8103 ACFD FAF8 FC56 05F9 FBF9 56FF" /* ���.�����V.���V� */ $"FCFE 1607 FF56 F9F9 FCFC FAFF B916 0065" /* ��..�V�������..e */ $"FC89 F216 FB89 0065 F716 FB89 F816 FB89" /* ���.��.e�.���.�� */ $"FB16 005F FD89 003A F716 0065 FC89 003A" /* �.._��.:�..e��.: */ $"FC16 0065 FD89 005F FD10 0058 FE89 002D" /* �..e��._�..X��.- */ $"F501 0033 FC89 005E FC01 035E 8957 08F5" /* �..3��.^�..^�W.� */ $"01FC 02F9 1002 1616 3AFD 8902 5F89 65F8" /* .�.�....:��._�e� */ $"8900 3AD5 1600 90EE 1609 FAFE F500 ACF5" /* �.:�..��.����.�� */ $"F500 FBFD FDF8 0BF9 FCFB FCF9 FFF9 81FD" /* �.����.��������� */ $"F8FC FBFC FA0D FFFB 56F9 FCFA 81FA F8AC" /* �����.��V������� */ $"F9F8 81FE FE16 07FE FAF8 F82B FEFE FFF7" /* �����..����+���� */ $"16FC 1CC8 1600 65FC 8900 65F3 16FB 8900" /* .�.�..e��.e�.��. */ $"65F7 16FB 89F8 16FB 89FB 1600 65FD 8900" /* e�.���.���..e��. */ $"3AF7 1600 65FC 8900 3AFC 16FC 8900 5FFE" /* :�..e��.:�.��._� */ $"1000 5FFE 8901 0202 F501 0033 FC89 005E" /* .._��...�..3��.^ */ $"FC01 0157 57F3 01FD 02F8 1002 1616 3AFE" /* �..WW�.�.�....:� */ $"89FE 65F7 89D4 1600 90ED 161B FF2B F5F8" /* ��e���..��..�+�� */ $"F72B 2BF8 FEF7 F8F8 F756 FFFE FB56 FFFB" /* �++������V���V�� */ $"2BFF F956 F9F9 FAF9 FEFA 0CF9 F9F8 ACF9" /* +��V������.����� */ $"81F9 F981 F956 F7FF FE16 05FC FDF9 2B2B" /* �����V���..���++ */ $"ACF9 16E2 1CDE 1600 3AFB 8900 3AF4 16FB" /* ��.�.�..:��.:�.� */ $"8900 65F7 16FB 89F8 16FB 89FB 1600 65FD" /* �.e�.���.���..e� */ $"8900 3AF7 1600 65FC 8900 3AFC 16FC 8900" /* �.:�..e��.:�.��. */ $"5FFE 10FE 89FD 02F6 0100 33FC 8900 5EFB" /* _�.���.�..3��.^� */ $"0100 08F4 01FC 02F9 10FE 1600 3AFE 8902" /* ...�.�.�.�..:��. */ $"5F65 65F7 8900 3AD5 1600 87ED 1616 FFF7" /* _ee��.:�..��..�� */ $"F52B FAF6 8100 FFF5 F856 F956 FEAC FC56" /* �+���.���V�V���V */ $"81FF F8FC FDFE 5600 F9FC 560C F956 ACFA" /* ������V.��V.�V�� */ $"FAF9 F9F8 FDF8 F9FA FDFE 1604 FEFF F9F8" /* ����������..���� */ $"FEFB 16DF 1CDE 16FA 89F4 16FB 8900 65F7" /* ��.�.�.���.��.e� */ $"16FB 89F8 16FB 89FB 1600 65FD 8900 65F7" /* .���.���..e��.e� */ $"1600 65FC 8900 3AFC 16FC 8902 6510 10FE" /* ..e��.:�.��.e..� */ $"8900 10FD 02F6 0100 33FC 8900 5EED 01FD" /* �..�.�..3��.^�.� */ $"02F8 10FE 1604 3A89 1616 89F6 1601 893A" /* .�.�..:�..��..�: */ $"D516 0080 EE16 18FA FFF5 F52B F9F5 FB00" /* �..��..����+���. */ $"FDF9 2B56 F856 81FF ACF9 FAFF FDFA FAAC" /* ��+V�V���������� */ $"FC56 FEF8 0C56 F9F9 FCFA FAF9 56FA 81F9" /* �V��.V������V��� */ $"56FE FD16 03FE FEFF ACFC 16DE 1CDE 16F9" /* V��..�����.�.�.� */ $"89F5 16FB 8900 65F7 16FB 89F8 16FB 89FB" /* ��.��.e�.���.��� */ $"1600 65FD 8900 65F7 1600 65FC 8900 3AFC" /* ..e��.e�..e��.:� */ $"16FB 8905 103A 8989 1010 FC02 F701 0033" /* .��..:��..�.�..3 */ $"FC89 005E EE01 FC02 F810 FE16 003A FE89" /* ��.^�.�.�.�..:�� */ $"005F C816 007F EE16 1D81 FEF5 F6F5 FBF6" /* ._�...�..������� */ $"8100 81FB 2BF8 56F9 56FB FF56 F9FF FFF9" /* �.��+�V�V��V���� */ $"FDFA 8156 56F9 F9FD AC0C FDFA FEF9 81FC" /* ���VV����.������ */ $"5656 ACF9 F981 FFFB 1CFD 16DB 1CDF 1600" /* VV������.�.�.�.. */ $"3AF9 8900 3AF7 16FB 8900 65F7 16FB 89F8" /* :��.:�.��.e�.��� */ $"16FB 89FB 1600 3AFC 89F7 1600 65FC 8900" /* .���..:���..e��. */ $"3AFC 16F8 8900 5FFE 10FC 0202 0101 08FB" /* :�.��._�.�.....� */ $"0100 33FC 8900 5EEF 01FC 02F8 10FC 1602" /* ..3��.^�.�.�.�.. */ $"6589 5FC7 1600 7EEE 1619 FB56 F5F6 F5FA" /* e�_�..~�..�V���� */ $"F7F8 F62B FFF6 56F8 FA56 F7AC ACF8 FDFF" /* ���+��V��V������ */ $"FCFE FAFB FE56 00F8 FEFA 0EF9 FBFD FF56" /* �����V.���.����V */ $"FAFF FAF8 FBF9 FAFA FBFF D11C DF16 F789" /* �����������.�.�� */ $"015F 3AFC 1601 3A65 FB89 0065 F716 FB89" /* ._:�..:e��.e�.�� */ $"F816 FB89 FB16 003A FC89 003A F816 0065" /* �.���..:��.:�..e */ $"FC89 003A FC16 0065 F989 FD10 FC02 0301" /* ��.:�..e���.�... */ $"5E89 08FC 0100 33FC 8900 5EEF 01FC 02F8" /* ^�.�..3��.^�.�.� */ $"16D3 1CED 1600 74EE 1601 AC2B FEF5 2B00" /* .�.�..t�..�+��+. */ $"FCF7 2BF5 F9FF F9F7 F9F8 F8F7 ACFB FCFA" /* ��+������������� */ $"FFF9 FDFB FBF8 FE56 F8F8 56F9 F956 FCFA" /* �������V��V��V�� */ $"F7FC 81F7 FBFC F9F9 FAAC FFD0 1CE1 1600" /* ������������.�.. */ $"3AE9 8900 65F7 16FB 89F8 16FB 89FA 16FB" /* :�.e�.���.���.� */ $"89F8 16FB 8900 3AFC 1600 3AFA 8900 65FC" /* ��.��.:�..:��.e� */ $"10FE 0204 3383 8989 5EFC 0100 33FC 8900" /* .�..3���^�..3��. */ $"5EF0 01FC 02F8 16CD 1CF2 1600 8500 1CEF" /* ^�.�.�.�.�..�..� */ $"1631 FEF6 F6F5 F500 F956 F7F5 F5F7 FFFA" /* .1�����.�V������ */ $"F8F7 56F7 F7FD 81FF FBFD FF81 FCFA FEFC" /* ��V������������� */ $"F8F8 F9FA 5656 FA81 F7F8 56F7 F9FE F9FD" /* ����VV����V����� */ $"FCF9 FFFD CB1C E616 0065 EA89 0065 F71C" /* �����.�..e�.e�. */ $"FB89 FC1C FD16 FB89 FA16 0065 FB89 025F" /* ���.�.���..e��._ */ $"1616 FE3A 0116 65FB 8900 3AFB 16F8 8900" /* ..�:..e��.:�.��. */ $"5FFE 3A01 5F83 FB89 FC01 0033 FC89 005E" /* _�:._����..3��.^ */ $"F101 FC02 F716 F91C 0065 FD89 0065 DB1C" /* �.�.�.�..e��.e�. */ $"F216 0074 FE1C F116 26FE F6F5 00F5 F6F5" /* �..t�.�.&���.��� */ $"ACF7 F5F5 F6FF FE56 F8F7 56F7 F8FD FFF9" /* �������V��V����� */ $"FEFF FCF9 81FB 81F9 F9FA F9FA F9F9 FBF7" /* ���������������� */ $"FEF8 082B FBFD FCFD 56F7 FFFD CA1C E716" /* ��.+����V����.�. */ $"0065 EA89 0040 F91C 0040 FB89 F91C 0016" /* .e�.@�..@���... */ $"FB89 003A FA16 EC89 003A FC16 0065 ED89" /* ��.:�.�.:�..e� */ $"FC01 005E FB89 F301 FB02 F716 F91C 0065" /* �..^���.�.�.�..e */ $"FB89 0065 DB1C F316 007B FC1C F316 02FD" /* ��.e�.�..{�.�..� */ $"F5F6 FE00 05F5 8156 00F6 F6FE FE23 F8F7" /* ���..��V.����#�� */ $"56F8 2BFB FFAC F9FF FFF9 81F9 56F8 F9F9" /* V�+���������V��� */ $"FBFC F9F9 FCF7 F8F8 562B 8181 FA81 5656" /* ��������V+����VV */ $"FAFF C81C EE16 FB1C 0065 EA89 0065 FA1C" /* ���.�.�..e�.e�. */ $"F989 FA1C 0065 FA89 0065 FB16 005F EC89" /* ���..e��.e�.._� */ $"0065 FC16 EE89 015E 02FE 0100 33FA 8900" /* .e�.�.^.�..3��. */ $"5EF5 01FB 02F6 16FA 1C04 4089 8965 65FD" /* ^�.�.�.�..@��ee� */ $"89D9 1CF5 1600 76EF 1C28 FCAC F6F6 F500" /* ��.�..v�.(�����. */ $"F500 F8FD 00F5 81FC F8FF FCF7 F8F9 F7FA" /* �.��.����������� */ $"FFFC F8F9 56FE F7FD F856 56FC FFFD F956" /* ����V����VV����V */ $"FCF8 F8FE F907 56AC 81F7 F7F8 F7FE AE1C" /* �����.V��������. */ $"0065 EA89 FC1C 0040 F789 0040 FE1C 0040" /* .e��..@��.@�..@ */ $"F789 0065 FB1C 0065 EC89 FB1C EF89 002D" /* ��.e�..e��.�.- */ $"FE02 005E F789 F801 FA02 F616 F91C 0289" /* �..^���.�.�.�..� */ $"8940 FE1C FE89 0040 D01C 0116 1600 76EF" /* �@�.��.@�.....v� */ $"1C34 FEFB 0000 F5F5 00F6 00FE 2B56 FEFB" /* .4��..��.�.�+V�� */ $"F9F9 FFFC 56F7 F9FC FBAC F9F8 2BF7 FA56" /* ����V�������+��V */ $"F9F9 F881 FDAC F9F9 ACF8 F9FA F9F9 F7FB" /* ���������������� */ $"ACF7 F7F8 F7F8 FFAD 1C00 65ED 8900 40FC" /* ��������..e�.@� */ $"1CF5 89FE 1C00 65F6 89FA 1C00 40EE 8900" /* .���..e���..@�. */ $"65FA 1C00 65F2 8900 33FE 0200 33F6 8900" /* e�..e�.3�..3��. */ $"5EFB 01F9 02F6 16F8 1C01 8940 FD1C 0340" /* ^�.�.�.�..�@�..@ */ $"8989 40CE 1C00 86EF 1C05 FFFA 00F5 F5F6" /* ��@�..��..��.��� */ $"FEF5 2C81 56F9 FFFA FAF9 FFFF ACF9 ACFC" /* ��,�V����������� */ $"FBF8 FEFE AC2B 2BF8 56FC F7F9 81FA 56FC" /* �����++�V�����V� */ $"FE56 81F9 56F9 F8FA F9AC 2BF7 F72B ACAC" /* �V��V�����+��+�� */ $"AB1C FC40 F91C FD40 F91C 0140 40FB 1C01" /* �.�@�.�@�..@@�.. */ $"4040 FC1C FE40 FD1C FD40 F81C FD40 F81C" /* @@�.�@�.�@�.�@�. */ $"FD40 F61C FE40 FB16 FD3A 0016 FC02 0A33" /* �@�.�@�.�:..�.�3 */ $"332D 0902 0101 082C 3333 FD01 F702 F616" /* 3-�....,33�.�.�. */ $"F81C 0140 89FB 1C02 8989 40CE 1C00 52EF" /* �..@��..��@�..R� */ $"1C05 AC81 F6F5 F5F6 FEF5 03F6 81FA FDFE" /* ..��������.����� */ $"F905 FF56 FDFF FEFD FE56 1CF7 FBFE F856" /* �.�V�����V.����V */ $"F8F9 81F7 56F9 56FF FEF9 F9FA FCFC FAF9" /* ����V�V��������� */ $"FAFC 56F8 FA81 56FF 811C CF1C F516 E702" /* ��V���V��.�.�.�. */ $"F516 F71C 0140 89FD 1C00 40FE 8900 40CE" /* �.�..@��..@��.@� */ $"1C00 54EE 1C06 FDF6 F5F5 F6F5 00FE F52A" /* ..T�..������.��* */ $"81FC F956 81FE F9F9 FEFF ACF8 F956 F7F8" /* ���V���������V�� */ $"FCFC FF56 F7AC F9F7 5656 FAFE ACFA FAAC" /* ���V����VV������ */ $"FCF9 F9FD F8FC F8FE FFF8 AC81 1CCF 1CF3" /* ������������.�.� */ $"16EB 02F3 16F7 1C01 4089 FD1C 0065 FE89" /* .�.�.�..@��..e�� */ $"FB1C 0189 40D5 1C00 53EF 1C04 FFFD F700" /* �..�@�..S�..���. */ $"00FE F5FE 002B FBFA 56F8 FCFE 56F9 F9FB" /* .���.+��V���V��� */ $"FEFC 56F8 F8FE ACFF FAF8 5656 FCF7 F7F8" /* ��V�������VV���� */ $"5656 81FF FBFA FAF9 2BFC ACAC F8FC FAF9" /* VV������+������� */ $"F9FF 811C CF1C F216 EF02 F216 F61C 0040" /* ���.�.�.�.�.�..@ */ $"FC89 FE65 0040 FA89 0040 D51C 004D EF1C" /* ���e.@��.@�..M�. */ $"0681 FF56 F500 F5F5 FE00 19F6 FEF9 F82B" /* .��V�.���..����+ */ $"FEAC F8F9 FBF9 81FF FAF9 F7FD F9F8 56F9" /* ��������������V� */ $"FAF8 81F8 2BFE F810 F9F9 FDAC F9F9 F8FC" /* ����+��.�������� */ $"56FC ACF8 F9F9 F8FE 8181 1CCE 1CF0 16F7" /* V���������.�.�.� */ $"02F0 16F4 1C00 40F1 89D4 1C00 46EE 1C03" /* .�.�..@��..F�.. */ $"FFF7 F500 FCF5 1A2B FFF8 F8F6 FFFD 56F9" /* ���.��.+������V� */ $"FEF9 F9FE FEFA FC81 FF56 F9F9 FCFB F9FB" /* ���������V������ */ $"F7F7 FEF8 0FF9 56F9 F956 F756 FCFA FFFA" /* ����.�V��V�V���� */ $"F9FA F900 FE81 1CCD 1CD7 16F3 1C00 40F1" /* ���.��.�.�.�..@� */ $"89D4 1C00 4EEE 1C36 FFF7 00F6 F5F6 F5F5" /* ��..N�.6��.����� */ $"F6F7 FEF8 F72B FEAC FBF7 ACF9 5656 FFFE" /* �����+������VV�� */ $"FCF9 FFAC FAFA 81FA F8FD F7F7 F956 56FA" /* �������������VV� */ $"56F8 F856 562B FEF8 FDAC 5656 AC81 FF81" /* V��VV+����VV���� */ $"1CCC 1CD9 16F2 1C02 4089 65F5 1C02 6589" /* .�.�.�..@�e�..e� */ $"40D5 1C00 4AEE 1C36 FF2B 002B F6F6 2B00" /* @�..J�.6�+.+��+. */ $"F681 FCF8 56F7 ACFE AC56 F856 56F8 F8AC" /* ����V����V�VV��� */ $"FFFD FBFF 81FB FA56 FAF9 FCF8 F956 FBAC" /* �������V�����V�� */ $"FD2B F7F7 F8F7 FAFB 56FF FAF8 81FF FE81" /* �+������V������� */ $"1CCB 1CDB 16F0 1C00 89F3 1C00 40D4 1C00" /* .�.�.�..��..@�.. */ $"44EE 1C14 FEFC 00F5 F62B 002B 00FD FBF8" /* D�..��.��+.+.��� */ $"F756 FCFE FDF8 F9F8 F7FE F806 ACAC FCFF" /* �V���������.���� */ $"81F9 F9FE 5606 ACF9 FAFB 81FF 81FC F708" /* ����V.���������. */ $"2BAC F9AC FCF9 ACFF FF81 1CC9 1CDF 16EE" /* +���������.�.�.� */ $"1C00 40C5 1C00 41EE 1C03 FBFA 00F5 FEF6" /* ..@�..A�..��.��� */ $"0E00 00FF FAF9 F881 FCFD FDF9 F9F7 F8F6" /* ...������������� */ $"FEF8 0AFC FCAC F956 56F8 F8FA 81FC FEF9" /* �������VV������� */ $"0C56 F8F7 F8F7 F956 56AC AC56 FBFB FEFF" /* .V�����VV��V���� */ $"811C C71C E316 AF1C 003E EE1C 0381 2BF5" /* �.�.�.�..>�..�+� */ $"F5FE F615 F500 FFF9 F956 FBFB FDAC FA56" /* ���.�.���V�����V */ $"56F8 2BF7 F7F8 F7F7 56F7 FDF8 0456 FAFD" /* V�+�����V���.V�� */ $"FAFA FEF9 0856 F7F8 56F8 F8AC FF56 FCFF" /* ����.V��V����V�� */ $"811C C51C E716 AD1C 0041 EE1C 04FA F6F5" /* �.�.�.�..A�..��� */ $"00F6 FDF5 0FFF 56F8 F8FC FBFD FBFC FCF8" /* .���.�V��������� */ $"F8F7 F8F8 56FE F80B F7F8 F8F7 F856 56FD" /* ����V��.�����VV� */ $"FFFD FD81 FEF8 04F9 F956 F9AC FEFF 03FB" /* ������.��V����.� */ $"FCFB FF81 1CC2 1CED 16AA 1C00 41F0 5F03" /* ����.�.�.�..A�_. */ $"1C1C FCF6 FDF5 1400 F5F6 FF56 F856 81FF" /* ..����..���V�V�� */ $"FFFC FBAC 81F8 F881 F8F8 56F8 FCF7 16F8" /* ����������V���.� */ $"F856 ACFC F9F9 FDF9 F7F9 ACAC F9FB ACFB" /* �V�������������� */ $"FFAC FBFB 81FF FD1C 815F 815F DB5F 0046" /* �������.�_�_�_.F */ $"F15F 1D1C 1C81 FCF6 00F5 F6F5 F500 F8FF" /* �_...���.����.�� */ $"FA56 F9FC FFFF FC81 FDF9 56FD ACF9 F856" /* �V��������V����V */ $"F8FE F717 F856 F8F8 F9FE F9F8 56FD F7F7" /* ���.�V������V��� */ $"FBFE FBF9 FBFF 81FE FDFB FBF8 FEFF FE1C" /* ���������������. */ $"815F 815F DC5F 0047 F15F 031C 1CFF FBFD" /* �_�_�_.G�_...��� */ $"F636 0000 F500 FEFE FFFF FAFE FCFC 81F8" /* �6..�.���������� */ $"56F9 56FE F956 56F8 F7F8 F8FB FE56 F8AC" /* V�V��VV������V�� */ $"FDF8 F881 F92B F8F8 81F9 FAAC FDFD FCFD" /* �����+���������� */ $"FFFE FFAC FEFB FE1C 1C81 5F81 5FDC 5F00" /* �������..�_�_�_. */ $"43EE 1C00 FDFE F50F F600 F5F6 F5F7 FFFE" /* C�..���.�.������ */ $"FAFF FEF8 FC81 5656 FEF9 22F8 56F8 F781" /* ������VV��"�V��� */ $"F956 FC81 F981 FFFF 56F8 FEF7 F7F8 F8F7" /* �V������V������� */ $"56AC FEFE F9FC FCFD ACFE FC81 ACFE 811C" /* V��������������. */ $"811C DA1C 0043 EE1C 1D81 FF2B 00F6 00F5" /* �.�..C�..��+.�.� */ $"00F5 2BFF FCF8 FBFE F7FC F956 F856 F956" /* .�+��������V�V�V */ $"F8F8 2BF9 FD56 56FE F918 81FD FEF8 FCF9" /* ��+��VV��.������ */ $"F7F7 56F7 F8FB FAF8 FDFC FFF9 81AC FB81" /* ��V������������� */ $"FAF8 AC81 1C81 1CDA 1C00 42ED 1C02 FEAC" /* ����.�.�..B�..�� */ $"FAFE 002A F500 2BFF F9F9 F8FA F8FE 5656" /* ��.*�.+�������VV */ $"F9F9 56F8 F7F7 FAFE F956 56F9 FAFA F9FD" /* ��V������VV����� */ $"FCF8 FE56 F856 56F8 FAFC 2BF8 81AC FDFE" /* ���V�VV���+����� */ $"F904 FAF9 F9F8 FC81 1C81 1CDA 1C00 44EE" /* �.������.�.�..D� */ $"1C0A FCFF F82B F6F5 F500 F6FC ACFE F90F" /* .����+���.�����. */ $"F8F7 FEFA F9FA F9F8 F8F7 56FF FBF7 5656" /* ����������V���VV */ $"FEF9 1956 FF56 FE56 F8F9 56F8 56FD F8F7" /* ��.V�V�V��V�V��� */ $"F82B FEFD FA56 F9F9 5656 F7FC F981 1C81" /* �+���V��VV����.� */ $"1CDB 1C00 44EE 1C10 FE2B F5F5 F6F5 2BF5" /* .�..D�..�+����+� */ $"00FF F9F8 81FC F756 ACFE FA26 81F7 56F7" /* .������V���&��V� */ $"FCFD F7F8 AC56 F9F9 56FD FEFD F9F8 F9F9" /* �����V��V������� */ $"5656 FC81 F92B F82B F7FA F9F8 F9F9 56F8" /* VV���+�+������V� */ $"5681 FE81 1C81 1CDB 1C00 44EE 1C04 FFFE" /* V���.�.�..D�..�� */ $"F9F6 00FE F532 2BFF FDAC FAFF FC56 F9FD" /* ��.��2+������V�� */ $"ACFB FF56 F8FC FE56 F8F8 F9F8 F956 F8FF" /* ���V���V�����V�� */ $"FEF9 F8F9 F9FA F8AC 81FE FCF7 F8F8 F7F8" /* ���������������� */ $"5656 F9F8 F8F9 F8F9 FF81 1C81 1CDB 1C00" /* VV��������.�.�.. */ $"3FED 1C17 FBFF F7F5 F5F6 F5F8 FDF9 F6F7" /* ?�..������������ */ $"FEFE 56FE FD81 FAFB F981 FFFA FE56 00F9" /* ��V����������V.� */ $"FE56 0EF7 FDF8 F7FA FFFA F7FB FCFA ACF9" /* �V.������������� */ $"5656 FAF9 04FA FFF9 F8FF 811C 811C DB1C" /* VV��.������.�.�. */ $"0042 ED1C 07FE F9F5 F500 002B 2BFE 000C" /* .B�..����..++�.. */ $"FEAC F981 FFFA FAF9 56FB FF81 FAFD F91D" /* ��������V������. */ $"56F8 F8F7 F8F7 F7FB FFF8 F9FD 5656 F8F8" /* V�����������VV�� */ $"5656 FAFA F956 FAF9 F8FD FFFC F8FF 811C" /* VV���V���������. */ $"811C DB1C 0045 EEFF 11AC FD81 F800 00F6" /* �.�..E��.����..� */ $"FAFD F500 FEFC F656 ACFE 56FE F926 FFAC" /* ���.���V��V��&�� */ $"F8F9 F9FA FAF9 56F7 2BF7 56F8 F8F9 F9F7" /* ������V�+�V����� */ $"FCF9 F8F8 56F8 F856 F9F9 FA56 5681 56F8" /* ����V��V���VV�V� */ $"FC56 F8FE 8181 FF81 FFDC FF01 6E28 E0FE" /* �V���������.n(�� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"F9AC F8F8 81FA FCFF FDFF 00F5 F6FD 81FD" /* ����������.����� */ $"FBFB F7F8 FAAC FCFE F907 FA81 FAFA F9F9" /* ���������.������ */ $"F8F8 FD56 03F7 FCF9 F8FD F731 F8AC 8156" /* ���V.������1���V */ $"F9F9 F8FA FCF9 F9FA F9AC FCFE E0FE E0FE" /* ���������������� */ $"E0FE 1616 E0FE E0FE E0FE E0FE E0FE E0FE" /* ��..������������ */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE FE16" /* ���������������. */ $"7FFE E016 16FE E0FE E0FE E0FE E0FE E0FE" /* .��..����������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E016 16FE E0FE E0FE E016" /* �������..������. */ $"16FE E0FE E0FE E0FE E0FE E0FE E016 16FE" /* .������������..� */ $"E016 16FE E0FE E0FE E0FE E0FE E0FE E0FE" /* �..������������� */ $"E0FE E0FE E0FE E016 16FE E0FE E0FE E0FE" /* �������..������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE 1616 E0FE" /* ������������..�� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E00E FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* �.�������������� */ $"FEFE 1637 FEE0 FEE0 FE16 16E0 FE16 16E0" /* ��.7�����..��..� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FB16 05FE" /* �������������..� */ $"E0FE E0FE E0FD 1609 FEE0 FEE0 FEE0 FEE0" /* ������.��������� */ $"FEE0 FC16 00E0 FE16 11E0 FE16 16E0 FEE0" /* ���..��..��..��� */ $"FEE0 FEE0 FE16 16E0 FEE0 FE01 7630 FEE0" /* �����..����.v0�� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 56FF" /* ��������������V� */ $"FFAC FBF7 F9FF AC56 FAFF 00F5 00F6 ACF8" /* �������V��.�.��� */ $"FC56 F756 FDF9 FEF8 FAF9 FA81 FEAC F9FE" /* �V�V������������ */ $"5603 F956 56F9 FDF7 0EF6 2BF7 F82B FFFC" /* V.�VV���.�+��+�� */ $"56F9 F9F8 F7FF FBF9 FEFA 7FFF E0FE E0FE" /* V���������.����� */ $"E0FE E016 16FE E0FE E0FE E0FE E0FE E0FE" /* ���..����������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"1616 E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ..�������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE 1616 E0FE E0FE E0FE" /* ��������..������ */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE 1616" /* ��������������.. */ $"E0FE 1616 E0FE E0FE E0FE E0FE E0FE E0FE" /* ��..������������ */ $"E0FE E0FE E0FE E0FE 1616 E07F FEE0 FEE0" /* ��������..�.���� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 1616" /* ��������������.. */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FE16 16E0 FEE0 FEE0 FEE0 1616 FEE0 1616" /* �..�������..��.. */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FE16" /* ���������������. */ $"16E0 FEE0 FEE0 FEE0 1616 FEE0 2516 16FE" /* .�������..��%..� */ $"E0FE E0FE E0FE E0FE 1616 E0FE E0FE E016" /* ��������..�����. */ $"16FE E0FE E0FE E0FE E0FE E0FE E016 16FE" /* .������������..� */ $"E0FE E001 5B29 E0FE E0FE E0FE E0FE E0FE" /* ���.[)���������� */ $"E0FE E0FE E0FA FFF9 FCFD F956 F8AC FDFC" /* �����������V���� */ $"FAFF 56FF 56F9 56F9 FEF8 F8F7 FC56 FCFA" /* ��V�V�V������V�� */ $"FEF9 07FB FCFC F956 F856 FAFD F904 56F8" /* ��.����V�V���.V� */ $"F72B 2BFC F80B 56F8 1616 F7FB FC81 1616" /* �++��.V�..����.. */ $"F9FF FE16 03E0 FEE0 FEFD 1602 E0FE E0FE" /* ���..�����..���� */ $"1609 E0FE 1616 E0FE 1616 E0FE FE16 08FE" /* .���..��..���..� */ $"E0FE E0FE E016 16FE FE16 00FE FD16 02E0" /* �����..��..��..� */ $"FEE0 FD16 01FE E0FE 1601 E0FE FC16 01FE" /* ���..���..���..� */ $"E0FE 1602 E0FE E0FD 1604 FEE0 FEE0 FEFE" /* ��..����..������ */ $"1600 FEFD 1605 E0FE E0FE E0FE FD16 00E0" /* ..��..�������..� */ $"FD16 02FE E0FE FE16 06FE E0FE E0FE E0FE" /* �..����..������� */ $"FE16 01FE E0FD 1602 FEE0 FEFE 1601 FEE0" /* �..���..����..�� */ $"FA16 01E0 FEFD 1602 E0FE E0FE 1601 E0FE" /* �..���..����..�� */ $"FC16 01FE E0FD 1605 FEE0 FEE0 FEE0 FE16" /* �..���..�������. */ $"01E0 FEFD 1604 E0FE E0FE E0FD 1600 FEFD" /* .���..������..�� */ $"1602 E0FE E0FE 1606 E0FE E0FE E0FE E0FD" /* ..����..�������� */ $"1601 FEE0 FE16 02E0 FEE0 FE16 32E0 FEE0" /* ..���..����.2��� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 1616" /* ��������������.. */ $"FEE0 FEE0 FEE0 FE16 16E0 FEE0 FEE0 FEE0" /* �������..������� */ $"FEE0 FEE0 FEE0 1616 FEE0 FEE0 FE16 16E0" /* ������..�����..� */ $"FE16 01E0 FEFE 1601 FEE0 FD16 02FE E0FE" /* �..���..���..��� */ $"016B 2AFE E0FE E0FE E0FE E0FE E0FE E0FE" /* .k*������������� */ $"E0FC FFF7 2B2B ACF7 56F9 FFFC FDAC FF56" /* ����++��V������V */ $"81FF FFFD FC81 F856 F8F9 8181 5656 FDF9" /* �������V����VV�� */ $"FD56 07F9 F9FA F9FA F956 F8FD F706 F856" /* �V.������V���.�V */ $"F7F8 56F7 F8FB 1616 FAFA 1616 FE16 16E0" /* ��V���..��..�..� */ $"FEE0 1616 FE16 16E0 FEE0 FE16 16E0 FEFD" /* ��..�..����..��� */ $"1624 E0FE 1616 E016 16FE E0FE E0FE 1616" /* .$��..�..�����.. */ $"E0FE 1616 E016 16FE 1616 E016 16FE 1616" /* ��..�..�..�..�.. */ $"E016 16FE 1616 E0FE 165C E0FE E016 16FE" /* �..�..��.\���..� */ $"1616 E016 16FE 1616 E0FE E0FE E0FE 1616" /* ..�..�..������.. */ $"E016 16FE 1616 E0FE E0FE E0FE 1616 E0FE" /* �..�..������..�� */ $"1616 E016 16FE 1616 E016 16FE E0FE E0FE" /* ..�..�..�..����� */ $"1616 E016 16FE 1616 E016 16FE E0FE E016" /* ..�..�..�..����. */ $"16FE 1616 E016 16FE 1616 E016 16FE 1616" /* .�..�..�..�..�.. */ $"E016 16FE 1616 E0FE 165B E0FE E016 16FE" /* �..�..��.[���..� */ $"E0FE E0FE E0FE E016 16FE 1616 E0FE 1616" /* �������..�..��.. */ $"E0FE E0FE E0FE E016 16FE E016 16FE 1616" /* �������..��..�.. */ $"E016 16FE 1616 E0FE E0FE E016 16FE E0FE" /* �..�..�����..��� */ $"E016 16FE 1616 E0FE E0FE 1616 E0FE E0FE" /* �..�..����..���� */ $"E0FE E0FE E0FE E0FE E0FE E0FE 1616 E0FE" /* ������������..�� */ $"E0FE E0FE E0FE FD16 09E0 FEE0 FEE0 FEE0" /* �������.�������� */ $"FEE0 FEFD 1616 E0FE E016 16FE E016 16FE" /* ����..���..��..� */ $"1616 E016 16FE E016 16FE E0FE E001 5A32" /* ..�..��..����.Z2 */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FC FFFA" /* ���������������� */ $"F7F7 F8FB F7F8 F7FF FDFA ACFF FEFE ACFD" /* ���������������� */ $"FBFA F9F8 F956 F856 F9F9 56F9 F956 56F7" /* �����V�V��V��VV� */ $"F7F8 56FC F904 56F8 56F8 F8FC 5603 F8F8" /* ��V��.V�V���V.�� */ $"F7F8 FB16 01F7 F9FC 1609 FEE0 FE16 16E0" /* ���..���.����..� */ $"1616 FEE0 FD16 01FE E0FD 1601 FEE0 FC16" /* ..���..���..���. */ $"17E0 FEE0 FEE0 1616 FEE0 1616 FE16 16E0" /* .�����..��..�..� */ $"1616 FE16 16E0 1616 FEFC 1606 FE16 16E0" /* ..�..�..��..�..� */ $"FEE0 FEFC 1623 FE16 16E0 1616 FEE0 FEE0" /* ����.#�..�..���� */ $"FEE0 1616 FE16 16E0 1616 FEE0 FEE0 FEE0" /* ��..�..�..������ */ $"1616 FEE0 1616 FE16 16E0 FC16 11E0 FEE0" /* ..��..�..��..��� */ $"FEE0 1616 FEE0 FEE0 1616 FE16 16E0 FEFD" /* ��..����..�..��� */ $"160F E016 16FE 1616 E016 16FE 1616 E016" /* ..�..�..�..�..�. */ $"16FE FC16 07FE 1616 E0FE E0FE E0FE 161F" /* .��..�..������.. */ $"E0FE E0FE E0FE 1616 E016 16FE E016 16FE" /* ������..�..��..� */ $"E0FE E0FE E0FE 1616 E0FE 1616 E016 16FE" /* ������..��..�..� */ $"FC16 05FE E0FE E0FE E0FE 1601 E0FE FC16" /* �..�������..���. */ $"01FE E0FD 1642 FEE0 FEE0 FEE0 FEE0 FEE0" /* .���.B���������� */ $"FEE0 FEE0 FEE0 1616 FEE0 FEE0 FEE0 FEE0" /* ������..�������� */ $"FEE0 FE16 16E0 FEE0 FEE0 FEE0 FEE0 1616" /* ���..���������.. */ $"FEE0 FEE0 FE16 16E0 FE16 16E0 1616 FE16" /* �����..��..�..�. */ $"16E0 FE16 16E0 FEE0 FE01 6F0E FEE0 FEE0" /* .��..����.o.���� */ $"FEE0 FEE0 FEE0 FE81 FCFF FCFD F810 F981" /* �������������.�� */ $"F7F8 ACFC FDFC F9F9 F8FA FD81 FAF9 F9FD" /* ���������������� */ $"56FC F903 56F8 F7F7 FDF8 FEF9 0856 56F8" /* V��.V�������.VV� */ $"F856 56F9 FB56 FEF8 02F7 F7F8 FD16 7FFC" /* �VV��V��.����..� */ $"81AC 1616 FCFF F9E0 FEE0 1616 FE16 16E0" /* ��..������..�..� */ $"1616 FE16 16E0 FEE0 1616 FEE0 FE16 16E0" /* ..�..���..���..� */ $"FEE0 FEE0 FEE0 FE16 16E0 FE16 16E0 1616" /* �������..��..�.. */ $"FE16 16E0 1616 FE16 16E0 1616 FEE0 FEE0" /* �..�..�..�..���� */ $"1616 FEE0 FEE0 1616 FEE0 FEE0 1616 FE16" /* ..����..����..�. */ $"16E0 FEE0 FEE0 FE16 16E0 1616 FE16 16E0" /* .������..�..�..� */ $"FEE0 FEE0 FE16 16E0 FE16 16E0 1616 FE16" /* �����..��..�..�. */ $"16E0 FEE0 FEE0 FEE0 FE16 16E0 1616 FE7F" /* .��������..�..�. */ $"1616 E016 16FE 1616 E016 16FE 1616 E016" /* ..�..�..�..�..�. */ $"16FE 1616 E016 16FE 1616 E016 16FE E0FE" /* .�..�..�..�..��� */ $"E016 16FE E0FE E0FE E0FE 1616 E0FE E0FE" /* �..�������..���� */ $"E016 16FE 1616 E0FE 1616 E0FE E0FE E0FE" /* �..�..��..������ */ $"E016 16FE E016 16FE 1616 E016 16FE E0FE" /* �..��..�..�..��� */ $"E0FE E0FE E0FE E0FE 1616 E016 16FE E0FE" /* ��������..�..��� */ $"E016 16FE 1616 E0FE E0FE E0FE E0FE E0FE" /* �..�..���������� */ $"E0FE E0FE E0FE 1616 E0FE E0FE E0FE E016" /* ������..�������. */ $"2816 FEE0 1616 FEE0 FEE0 FEE0 FEE0 FE16" /* (.��..���������. */ $"16E0 FEE0 FEE0 1616 FEE0 1616 FE16 16E0" /* .�����..��..�..� */ $"1616 FEE0 1616 FEE0 FEE0 0163 09E0 FEE0" /* ..��..����.c���� */ $"FEE0 FEE0 FEE0 F9FD FF10 F956 F856 F956" /* ���������.�V�V�V */ $"ACFA 56F8 56FA FCFC 81FA 56FA F902 FAF9" /* ��V�V�����V��.�� */ $"F9FE FA01 F956 FDF8 1456 F8FA F9FC 5656" /* ���.�V��.V����VV */ $"F7F8 F816 16FA 1616 F816 16F7 F7FC FD16" /* ���..�..�..����. */ $"0356 FB81 81FE 160A FFFE E0FE 1616 E016" /* .V����.�����..�. */ $"16FE E0FD 1608 FEE0 FE16 16E0 FEE0 FEFE" /* .���..���..����� */ $"1613 FEE0 FEE0 FEE0 1616 FEE0 1616 FE16" /* ..������..��..�. */ $"16E0 1616 FEE0 FD16 01FE E0FE 1608 E0FE" /* .�..���..���..�� */ $"1616 E0FE E0FE E0FE 1602 E0FE E0FD 161E" /* ..������..����.. */ $"FEE0 FEE0 FEE0 1616 FE16 16E0 1616 FEE0" /* ������..�..�..�� */ $"FEE0 FEE0 FE16 16E0 1616 FE16 16E0 FEFE" /* �����..�..�..��� */ $"1606 FEE0 FEE0 FEE0 FEFE 1608 FEE0 1616" /* ..��������..��.. */ $"FE16 16E0 FEFD 1609 E016 16FE 1616 E016" /* �..���.��..�..�. */ $"16FE FD16 02E0 FEE0 FE16 07E0 FE16 16E0" /* .��..����..��..� */ $"FEE0 FEFD 1606 E0FE E0FE E0FE E0FE 1616" /* ����..��������.. */ $"E0FE E016 16FE E0FE E0FE E0FE E016 16FE" /* ���..��������..� */ $"1616 E016 16FE E0FE 1605 E0FE E0FE E0FE" /* ..�..���..������ */ $"FD16 02E0 FEE0 FE16 02E0 FEE0 FD16 19FE" /* �..����..����..� */ $"1616 E016 16FE 1616 E0FE E0FE E0FE E016" /* ..�..�..�������. */ $"16FE E0FE E016 16FE E0FD 1609 FEE0 FE16" /* .����..���.����. */ $"16E0 FEE0 FEE0 FC16 09E0 FE16 16E0 FE16" /* .������.���..��. */ $"16E0 FEFE 1608 FEE0 FEE0 1616 FEE0 FE01" /* .���..����..���. */ $"773F FEE0 FEE0 FEE0 FEE0 F9FD FFAC 8156" /* w?�������������V */ $"56F9 FBFD FAF9 56FD 56F8 F82B F9FA F9FB" /* V�����V�V��+���� */ $"ACFA 56F9 56F9 56F9 F9FA F9FA FEAC F9F9" /* ��V�V�V��������� */ $"F82B 56F8 F8FC ACFC 56F8 2BF7 F7F8 F856" /* �+V�����V�+����V */ $"FBFC FE56 7FF8 F856 81FD FAF9 F956 F8F7" /* ���V.��V�����V�� */ $"F7F8 00FC FFFA F9E0 FEE0 FEE0 FEE0 FEE0" /* ��.������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FE16 16E0 FEE0 FEE0 FEE0 FEE0" /* �����..��������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FE7F E0FE E0FE E0FE E0FE E0FE" /* �����.���������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE 30E0 FEE0 FEE0 FEE0 FEE0" /* ������0��������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 0172 16E0 FEE0 FEE0" /* ��������.r.����� */ $"FEE0 F9FE FFFB FAF9 5656 F8FC FBF9 FAF9" /* ��������VV������ */ $"F9AC FDF7 1CAC FBFC ACFD ACF8 56F8 56F9" /* ����.�������V�V� */ $"F9FA F9F9 ACF9 56F9 56F8 F9F9 F8FA F9F7" /* ������V�V������� */ $"F8F9 FEF7 00F8 FC56 FEF8 0A56 56FB FCFA" /* ����.��V���VV��� */ $"FAF9 56F8 2BF7 FEF8 2EFC FF81 FEE0 FEE0" /* ��V�+���.������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FE16 7FE0 FEE0 FEE0" /* ���������..����� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FE6F E0FE E0FE" /* �����������o���� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE 0176 11FE" /* ������������.v.� */ $"E0FE E0FE E0FB FFFE FCF8 F9F7 F8F7 F7F8" /* ���������������� */ $"56FD F920 F8F7 F9F9 56F8 5656 F9F8 8156" /* V�� ����V�VV���V */ $"F8F9 81FC FEF8 56F9 56F9 F8F8 56FA 56F9" /* ������V�V���V�V� */ $"56F9 5656 F7FE 567F F8F8 5656 F856 56F8" /* V�VV��V.��VV�VV� */ $"F756 56F9 FBFC ACFD FEFF FDFD FCFA F9AC" /* �VV������������� */ $"FBF9 FEFD FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 7FFE E0FE E0FE E0FE" /* ��������.������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E0FE E0FE E0FE E0FE" /* ���������������� */ $"E0FE E0FE E0FE E0FE E039 FEE0 FEE0 FEE0" /* ���������9������ */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0 FEE0" /* ���������������� */ $"FEE0 FEE0 00A0 0083 00FF" /* ����.�.�.� */ }; \ No newline at end of file +/* # # Apple Macintosh Developer Technical Support # # MultiFinder-Aware Simple Sample Application # # Sample # # Sample.r - Rez Source # # Copyright © 1989 Apple Computer, Inc. # All rights reserved. # # Versions: # 1.00 08/88 # 1.01 11/88 # 1.02 04/89 MPW 3.1 # # Components: # Sample.p April 1, 1989 # Sample.c April 1, 1989 # Sample.a April 1, 1989 # Sample.inc1.a April 1, 1989 # SampleMisc.a April 1, 1989 # Sample.r April 1, 1989 # Sample.h April 1, 1989 # [P]Sample.make April 1, 1989 # [C]Sample.make April 1, 1989 # [A]Sample.make April 1, 1989 # # Sample is an example application that demonstrates how to # initialize the commonly used toolbox managers, operate # successfully under MultiFinder, handle desk accessories, # and create, grow, and zoom windows. # # It does not by any means demonstrate all the techniques # you need for a large application. In particular, Sample # does not cover exception handling, multiple windows/documents, # sophisticated memory management, printing, or undo. All of # these are vital parts of a normal full-sized application. # # This application is an example of the form of a Macintosh # application; it is NOT a template. It is NOT intended to be # used as a foundation for the next world-class, best-selling, # 600K application. A stick figure drawing of the human body may # be a good example of the form for a painting, but that does not # mean it should be used as the basis for the next Mona Lisa. # # We recommend that you review this program or TESample before # beginning a new application. */ #include "Types.r" #include "Sample.h" /* this is a definition for a resource which contains only a rectangle */ type 'RECT' { rect; }; /* we use an MBAR resource to conveniently load all the menus */ resource 'MBAR' (rMenuBar, preload) { { mApple, mFile, mEdit, mLight, mHelp }; /* five menus */ }; resource 'MENU' (mApple, preload) { mApple, textMenuProc, AllItems & ~MenuItem2, /* Disable dashed line, enable About and DAs */ enabled, apple, { "About Messages", noicon, nokey, nomark, plain; "-", noicon, nokey, nomark, plain } }; resource 'MENU' (mFile, preload) { mFile, textMenuProc, MenuItem12, /* enable Quit only, program enables others */ enabled, "File", { "New", noicon, "N", nomark, plain; "Open", noicon, "O", nomark, plain; "-", noicon, nokey, nomark, plain; "Close", noicon, "W", nomark, plain; "Save", noicon, "S", nomark, plain; "Save As", noicon, nokey, nomark, plain; "Revert", noicon, nokey, nomark, plain; "-", noicon, nokey, nomark, plain; "Page Setup", noicon, nokey, nomark, plain; "Print", noicon, nokey, nomark, plain; "-", noicon, nokey, nomark, plain; "Quit", noicon, "Q", nomark, plain } }; resource 'MENU' (mEdit, preload) { mEdit, textMenuProc, NoItems, /* disable everything, program does the enabling */ enabled, "Edit", { "Undo", noicon, "Z", nomark, plain; "-", noicon, nokey, nomark, plain; "Cut", noicon, "X", nomark, plain; "Copy", noicon, "C", nomark, plain; "Paste", noicon, "V", nomark, plain; "Clear", noicon, nokey, nomark, plain } }; resource 'MENU' (mLight, preload) { mLight, textMenuProc, NoItems, /* disable everything, program does the enabling */ enabled, "Messages", { "New Message", noicon, nokey, nomark, plain; } }; resource 'MENU' (mHelp, preload) { mHelp, textMenuProc, AllItems, /* disable everything, program does the enabling */ enabled, "Help", { "Quick Help", noicon, nokey, nomark, plain; "User Guide", noicon, nokey, nomark, plain; "Test Entry", noicon, nokey, nomark, plain; "Test Entry 2", noicon, nokey, nomark, plain; "Test Entry 3", noicon, nokey, nomark, plain; } }; /* this ALRT and DITL are used as an About screen */ resource 'ALRT' (rAboutAlert, purgeable) { {40, 20, 160, 290}, rAboutAlert, { /* array: 4 elements */ /* [1] */ OK, visible, silent, /* [2] */ OK, visible, silent, /* [3] */ OK, visible, silent, /* [4] */ OK, visible, silent }, centerMainScreen // Where to show the alert }; resource 'DITL' (rAboutAlert, purgeable) { { /* array DITLarray: 5 elements */ /* [1] */ {88, 180, 108, 260}, Button { enabled, "OK" }, /* [2] */ {8, 8, 24, 214}, StaticText { disabled, "Messages for Macintosh" }, /* [3] */ {32, 8, 48, 237}, StaticText { disabled, "Copyright © 2021 Cameron Henlin" }, /* [4] */ {56, 8, 72, 136}, StaticText { disabled, "cam.henlin@gmail.com" }, /* [5] */ {80, 24, 112, 167}, StaticText { disabled, "https://github.com/CamHenlin/MessagesForMacintosh" } } }; /* this ALRT and DITL are used as an error screen */ resource 'ALRT' (rUserAlert, purgeable) { {40, 20, 120, 260}, rUserAlert, { /* array: 4 elements */ /* [1] */ OK, visible, silent, /* [2] */ OK, visible, silent, /* [3] */ OK, visible, silent, /* [4] */ OK, visible, silent }, centerMainScreen // Where to show the alert }; resource 'DITL' (rUserAlert, purgeable) { { /* array DITLarray: 3 elements */ /* [1] */ {50, 150, 70, 230}, Button { enabled, "OK" }, /* [2] */ {10, 60, 30, 230}, StaticText { disabled, "Sample - Error occurred!" }, /* [3] */ {8, 8, 40, 40}, Icon { disabled, 2 } } }; resource 'WIND' (rWindow, preload, purgeable) { {39, 1, 341, 511}, zoomDocProc, visible, noGoAway, 0x0, "Messages", centerMainScreen // Where to show the alert }; resource 'RECT' (rStopRect, preload, purgeable) { {69, 69, 110, 110} }; resource 'RECT' (rXRect, preload, purgeable) { {32, 32, 69, 69} }; resource 'RECT' (rGoRect, preload, purgeable) { {120, 10, 220, 110} }; /* here is the quintessential MultiFinder friendliness device, the SIZE resource */ resource 'SIZE' (-1) { dontSaveScreen, acceptSuspendResumeEvents, enableOptionSwitch, canBackground, /* we can background; we don't currently, but our sleep value */ /* guarantees we don't hog the Mac while we are in the background */ multiFinderAware, /* this says we do our own activate/deactivate; don't fake us out */ backgroundAndForeground, /* this is definitely not a background-only application! */ dontGetFrontClicks, /* change this is if you want "do first click" behavior like the Finder */ ignoreChildDiedEvents, /* essentially, I'm not a debugger (sub-launching) */ not32BitCompatible, /* this app should not be run in 32-bit address space */ reserved, reserved, reserved, reserved, reserved, reserved, reserved, kPrefSize * 1024, kMinSize * 1024 }; \ No newline at end of file diff --git a/build/%NuklearQuickDraw.ad b/build/%NuklearQuickDraw.ad index 99386ef..75066b6 100644 Binary files a/build/%NuklearQuickDraw.ad and b/build/%NuklearQuickDraw.ad differ diff --git a/build/.rsrc/NuklearQuickDraw.APPL b/build/.rsrc/NuklearQuickDraw.APPL index 79838c3..2c0226a 100644 Binary files a/build/.rsrc/NuklearQuickDraw.APPL and b/build/.rsrc/NuklearQuickDraw.APPL differ diff --git a/build/CMakeFiles/3.16.3/CMakeSystem.cmake b/build/CMakeFiles/3.16.3/CMakeSystem.cmake index 6968466..34ab28c 100644 --- a/build/CMakeFiles/3.16.3/CMakeSystem.cmake +++ b/build/CMakeFiles/3.16.3/CMakeSystem.cmake @@ -1,6 +1,6 @@ -set(CMAKE_HOST_SYSTEM "Linux-5.11.0-27-generic") +set(CMAKE_HOST_SYSTEM "Linux-5.11.0-36-generic") set(CMAKE_HOST_SYSTEM_NAME "Linux") -set(CMAKE_HOST_SYSTEM_VERSION "5.11.0-27-generic") +set(CMAKE_HOST_SYSTEM_VERSION "5.11.0-36-generic") set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") include("/home/camh/Retro68-build/toolchain/m68k-apple-macos/cmake/retro68.toolchain.cmake") diff --git a/build/CMakeFiles/CMakeOutput.log b/build/CMakeFiles/CMakeOutput.log index b4a4baa..2dd0c73 100644 --- a/build/CMakeFiles/CMakeOutput.log +++ b/build/CMakeFiles/CMakeOutput.log @@ -1,5 +1,5 @@ The target system is: Retro68 - 1 - -The host system is: Linux - 5.11.0-27-generic - x86_64 +The host system is: Linux - 5.11.0-36-generic - x86_64 Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. Compiler: /home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc Build flags: @@ -33,13 +33,13 @@ The CXX compiler identification is GNU, found in "/home/camh/Documents/Retro68kA Determining if the C compiler works passed with the following output: Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp -Run Build Command(s):/usr/bin/make cmTC_34648/fast && /usr/bin/make -f CMakeFiles/cmTC_34648.dir/build.make CMakeFiles/cmTC_34648.dir/build +Run Build Command(s):/usr/bin/make cmTC_0858b/fast && /usr/bin/make -f CMakeFiles/cmTC_0858b.dir/build.make CMakeFiles/cmTC_0858b.dir/build make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_34648.dir/testCCompiler.c.obj -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -o CMakeFiles/cmTC_34648.dir/testCCompiler.c.obj -c /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp/testCCompiler.c -Linking C executable cmTC_34648 -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_34648.dir/link.txt --verbose=1 -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc CMakeFiles/cmTC_34648.dir/testCCompiler.c.obj -o cmTC_34648 +Building C object CMakeFiles/cmTC_0858b.dir/testCCompiler.c.obj +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -o CMakeFiles/cmTC_0858b.dir/testCCompiler.c.obj -c /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_0858b +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0858b.dir/link.txt --verbose=1 +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc CMakeFiles/cmTC_0858b.dir/testCCompiler.c.obj -o cmTC_0858b make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' @@ -47,18 +47,18 @@ make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/b Detecting C compiler ABI info compiled with the following output: Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp -Run Build Command(s):/usr/bin/make cmTC_2b078/fast && /usr/bin/make -f CMakeFiles/cmTC_2b078.dir/build.make CMakeFiles/cmTC_2b078.dir/build +Run Build Command(s):/usr/bin/make cmTC_57eab/fast && /usr/bin/make -f CMakeFiles/cmTC_57eab.dir/build.make CMakeFiles/cmTC_57eab.dir/build make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' -Building C object CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v -o CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c +Building C object CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v -o CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c Using built-in specs. COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc Target: m68k-apple-macos Configured with: /home/camh/Retro68/gcc/configure --target=m68k-apple-macos --prefix=/home/camh/Retro68-build/toolchain/ --enable-languages=c,c++ --with-arch=m68k --with-cpu=m68000 --disable-libssp MAKEINFO=missing Thread model: single gcc version 9.1.0 (GCC) -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1 -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -version -o /tmp/ccZKR5f0.s +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1 -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj -version -o /tmp/ccxzytuk.s GNU C17 (GCC) version 9.1.0 (m68k-apple-macos) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 @@ -73,14 +73,14 @@ GNU C17 (GCC) version 9.1.0 (m68k-apple-macos) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 68baab70957df643ffb4605a09112146 -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj /tmp/ccZKR5f0.s +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj /tmp/ccxzytuk.s COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/ LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000' -Linking C executable cmTC_2b078 -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2b078.dir/link.txt --verbose=1 -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -o cmTC_2b078 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000' +Linking C executable cmTC_57eab +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_57eab.dir/link.txt --verbose=1 +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj -o cmTC_57eab Using built-in specs. COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc COLLECT_LTO_WRAPPER=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper @@ -90,9 +90,9 @@ Thread model: single gcc version 9.1.0 (GCC) COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/ LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2b078' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccmVsDhC.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_2b078 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj --start-group -lgcc -lc -lretrocrt -lInterface --end-group -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2b078' '-mcpu=68000' +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_57eab' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccOWPyRM.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_57eab -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj --start-group -lgcc -lc -lretrocrt -lInterface --end-group +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_57eab' '-mcpu=68000' make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' @@ -114,18 +114,18 @@ Parsed C implicit link information from above output: link line regex: [^( *|.*[/\])(m68k-apple-macos-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] ignore line: [Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp] ignore line: [] - ignore line: [Run Build Command(s):/usr/bin/make cmTC_2b078/fast && /usr/bin/make -f CMakeFiles/cmTC_2b078.dir/build.make CMakeFiles/cmTC_2b078.dir/build] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_57eab/fast && /usr/bin/make -f CMakeFiles/cmTC_57eab.dir/build.make CMakeFiles/cmTC_57eab.dir/build] ignore line: [make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp'] - ignore line: [Building C object CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj] - ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v -o CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c] + ignore line: [Building C object CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj] + ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v -o CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc] ignore line: [Target: m68k-apple-macos] ignore line: [Configured with: /home/camh/Retro68/gcc/configure --target=m68k-apple-macos --prefix=/home/camh/Retro68-build/toolchain/ --enable-languages=c c++ --with-arch=m68k --with-cpu=m68000 --disable-libssp MAKEINFO=missing] ignore line: [Thread model: single] ignore line: [gcc version 9.1.0 (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000'] - ignore line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1 -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -version -o /tmp/ccZKR5f0.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000'] + ignore line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1 -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj -version -o /tmp/ccxzytuk.s] ignore line: [GNU C17 (GCC) version 9.1.0 (m68k-apple-macos)] ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version none] ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] @@ -140,14 +140,14 @@ Parsed C implicit link information from above output: ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version none] ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] ignore line: [Compiler executable checksum: 68baab70957df643ffb4605a09112146] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000'] - ignore line: [ /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj /tmp/ccZKR5f0.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000'] + ignore line: [ /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj /tmp/ccxzytuk.s] ignore line: [COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/] ignore line: [LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000'] - ignore line: [Linking C executable cmTC_2b078] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2b078.dir/link.txt --verbose=1] - ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj -o cmTC_2b078 ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj' '-c' '-mcpu=68000'] + ignore line: [Linking C executable cmTC_57eab] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_57eab.dir/link.txt --verbose=1] + ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc -v CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj -o cmTC_57eab ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-gcc] ignore line: [COLLECT_LTO_WRAPPER=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] @@ -157,13 +157,13 @@ Parsed C implicit link information from above output: ignore line: [gcc version 9.1.0 (GCC) ] ignore line: [COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/] ignore line: [LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2b078' '-mcpu=68000'] - link line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccmVsDhC.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_2b078 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj --start-group -lgcc -lc -lretrocrt -lInterface --end-group] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_57eab' '-mcpu=68000'] + link line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccOWPyRM.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_57eab -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj --start-group -lgcc -lc -lretrocrt -lInterface --end-group] arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2] ==> ignore arg [-plugin] ==> ignore arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so] ==> ignore arg [-plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccmVsDhC.res] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccOWPyRM.res] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lc] ==> ignore arg [-plugin-opt=-pass-through=-lretrocrt] ==> ignore @@ -172,10 +172,10 @@ Parsed C implicit link information from above output: arg [-q] ==> ignore arg [-undefined=_consolewrite] ==> ignore arg [-o] ==> ignore - arg [cmTC_2b078] ==> ignore + arg [cmTC_57eab] ==> ignore arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] - arg [CMakeFiles/cmTC_2b078.dir/CMakeCCompilerABI.c.obj] ==> ignore + arg [CMakeFiles/cmTC_57eab.dir/CMakeCCompilerABI.c.obj] ==> ignore arg [--start-group] ==> ignore arg [-lgcc] ==> lib [gcc] arg [-lc] ==> lib [c] @@ -192,13 +192,13 @@ Parsed C implicit link information from above output: Determining if the CXX compiler works passed with the following output: Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp -Run Build Command(s):/usr/bin/make cmTC_a430c/fast && /usr/bin/make -f CMakeFiles/cmTC_a430c.dir/build.make CMakeFiles/cmTC_a430c.dir/build +Run Build Command(s):/usr/bin/make cmTC_a6fa4/fast && /usr/bin/make -f CMakeFiles/cmTC_a6fa4.dir/build.make CMakeFiles/cmTC_a6fa4.dir/build make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_a430c.dir/testCXXCompiler.cxx.obj -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -o CMakeFiles/cmTC_a430c.dir/testCXXCompiler.cxx.obj -c /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx -Linking CXX executable cmTC_a430c -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a430c.dir/link.txt --verbose=1 -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ CMakeFiles/cmTC_a430c.dir/testCXXCompiler.cxx.obj -o cmTC_a430c +Building CXX object CMakeFiles/cmTC_a6fa4.dir/testCXXCompiler.cxx.obj +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -o CMakeFiles/cmTC_a6fa4.dir/testCXXCompiler.cxx.obj -c /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_a6fa4 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a6fa4.dir/link.txt --verbose=1 +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ CMakeFiles/cmTC_a6fa4.dir/testCXXCompiler.cxx.obj -o cmTC_a6fa4 make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' @@ -206,18 +206,18 @@ make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/b Detecting CXX compiler ABI info compiled with the following output: Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp -Run Build Command(s):/usr/bin/make cmTC_ec149/fast && /usr/bin/make -f CMakeFiles/cmTC_ec149.dir/build.make CMakeFiles/cmTC_ec149.dir/build +Run Build Command(s):/usr/bin/make cmTC_cbf60/fast && /usr/bin/make -f CMakeFiles/cmTC_cbf60.dir/build.make CMakeFiles/cmTC_cbf60.dir/build make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp +Building CXX object CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp Using built-in specs. COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ Target: m68k-apple-macos Configured with: /home/camh/Retro68/gcc/configure --target=m68k-apple-macos --prefix=/home/camh/Retro68-build/toolchain/ --enable-languages=c,c++ --with-arch=m68k --with-cpu=m68000 --disable-libssp MAKEINFO=missing Thread model: single gcc version 9.1.0 (GCC) -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/cc58RCfk.s +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/ccQugppr.s GNU C++14 (GCC) version 9.1.0 (m68k-apple-macos) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 @@ -235,14 +235,14 @@ GNU C++14 (GCC) version 9.1.0 (m68k-apple-macos) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 5b31867a30cfa7e65d4bce12c39f8a21 -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj /tmp/cc58RCfk.s +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj /tmp/ccQugppr.s COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/ LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' -Linking CXX executable cmTC_ec149 -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ec149.dir/link.txt --verbose=1 -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_ec149 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' +Linking CXX executable cmTC_cbf60 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cbf60.dir/link.txt --verbose=1 +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_cbf60 Using built-in specs. COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ COLLECT_LTO_WRAPPER=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper @@ -252,9 +252,9 @@ Thread model: single gcc version 9.1.0 (GCC) COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/ LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_ec149' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccPhpacO.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_ec149 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_ec149' '-mcpu=68000' +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cbf60' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7QCGeS.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_cbf60 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cbf60' '-mcpu=68000' make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' @@ -282,18 +282,18 @@ Parsed CXX implicit link information from above output: link line regex: [^( *|.*[/\])(m68k-apple-macos-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] ignore line: [Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp] ignore line: [] - ignore line: [Run Build Command(s):/usr/bin/make cmTC_ec149/fast && /usr/bin/make -f CMakeFiles/cmTC_ec149.dir/build.make CMakeFiles/cmTC_ec149.dir/build] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_cbf60/fast && /usr/bin/make -f CMakeFiles/cmTC_cbf60.dir/build.make CMakeFiles/cmTC_cbf60.dir/build] ignore line: [make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp'] - ignore line: [Building CXX object CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj] - ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Building CXX object CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj] + ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++] ignore line: [Target: m68k-apple-macos] ignore line: [Configured with: /home/camh/Retro68/gcc/configure --target=m68k-apple-macos --prefix=/home/camh/Retro68-build/toolchain/ --enable-languages=c c++ --with-arch=m68k --with-cpu=m68000 --disable-libssp MAKEINFO=missing] ignore line: [Thread model: single] ignore line: [gcc version 9.1.0 (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] - ignore line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/cc58RCfk.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] + ignore line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/ccQugppr.s] ignore line: [GNU C++14 (GCC) version 9.1.0 (m68k-apple-macos)] ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version none] ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] @@ -311,14 +311,14 @@ Parsed CXX implicit link information from above output: ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version none] ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] ignore line: [Compiler executable checksum: 5b31867a30cfa7e65d4bce12c39f8a21] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] - ignore line: [ /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj /tmp/cc58RCfk.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] + ignore line: [ /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj /tmp/ccQugppr.s] ignore line: [COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/] ignore line: [LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] - ignore line: [Linking CXX executable cmTC_ec149] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ec149.dir/link.txt --verbose=1] - ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_ec149 ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] + ignore line: [Linking CXX executable cmTC_cbf60] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cbf60.dir/link.txt --verbose=1] + ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_cbf60 ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++] ignore line: [COLLECT_LTO_WRAPPER=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] @@ -328,13 +328,13 @@ Parsed CXX implicit link information from above output: ignore line: [gcc version 9.1.0 (GCC) ] ignore line: [COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/] ignore line: [LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_ec149' '-mcpu=68000'] - link line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccPhpacO.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_ec149 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cbf60' '-mcpu=68000'] + link line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7QCGeS.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_cbf60 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group] arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2] ==> ignore arg [-plugin] ==> ignore arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so] ==> ignore arg [-plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccPhpacO.res] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc7QCGeS.res] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lc] ==> ignore arg [-plugin-opt=-pass-through=-lretrocrt] ==> ignore @@ -343,10 +343,10 @@ Parsed CXX implicit link information from above output: arg [-q] ==> ignore arg [-undefined=_consolewrite] ==> ignore arg [-o] ==> ignore - arg [cmTC_ec149] ==> ignore + arg [cmTC_cbf60] ==> ignore arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] - arg [CMakeFiles/cmTC_ec149.dir/CMakeCXXCompilerABI.cpp.obj] ==> ignore + arg [CMakeFiles/cmTC_cbf60.dir/CMakeCXXCompilerABI.cpp.obj] ==> ignore arg [-lstdc++] ==> lib [stdc++] arg [-lm] ==> lib [m] arg [--start-group] ==> ignore diff --git a/build/CMakeFiles/NuklearQuickDraw.dir/C.includecache b/build/CMakeFiles/NuklearQuickDraw.dir/C.includecache index d53fe8a..2be39ed 100644 --- a/build/CMakeFiles/NuklearQuickDraw.dir/C.includecache +++ b/build/CMakeFiles/NuklearQuickDraw.dir/C.includecache @@ -29,6 +29,8 @@ ToolUtils.h - Memory.h - +Sound.h +- SegLoad.h - Files.h diff --git a/build/CMakeFiles/NuklearQuickDraw.dir/Sample.c.obj b/build/CMakeFiles/NuklearQuickDraw.dir/Sample.c.obj index 4703db3..c13b23f 100644 Binary files a/build/CMakeFiles/NuklearQuickDraw.dir/Sample.c.obj and b/build/CMakeFiles/NuklearQuickDraw.dir/Sample.c.obj differ diff --git a/build/CMakeFiles/NuklearQuickDraw.dir/coprocessorjs.c.obj b/build/CMakeFiles/NuklearQuickDraw.dir/coprocessorjs.c.obj index 8d234fc..d2644b4 100644 Binary files a/build/CMakeFiles/NuklearQuickDraw.dir/coprocessorjs.c.obj and b/build/CMakeFiles/NuklearQuickDraw.dir/coprocessorjs.c.obj differ diff --git a/build/NuklearQuickDraw.bin b/build/NuklearQuickDraw.bin index 4ff247e..704480b 100644 Binary files a/build/NuklearQuickDraw.bin and b/build/NuklearQuickDraw.bin differ diff --git a/build/NuklearQuickDraw.code.bin b/build/NuklearQuickDraw.code.bin index 7905a51..3ca6bb2 100644 Binary files a/build/NuklearQuickDraw.code.bin and b/build/NuklearQuickDraw.code.bin differ diff --git a/build/NuklearQuickDraw.code.bin.gdb b/build/NuklearQuickDraw.code.bin.gdb index 099c35d..23b76f0 100755 Binary files a/build/NuklearQuickDraw.code.bin.gdb and b/build/NuklearQuickDraw.code.bin.gdb differ diff --git a/build/NuklearQuickDraw.dsk b/build/NuklearQuickDraw.dsk index 891ba83..c517cae 100644 Binary files a/build/NuklearQuickDraw.dsk and b/build/NuklearQuickDraw.dsk differ diff --git a/build/Sample.r.rsrc.bin b/build/Sample.r.rsrc.bin index 73b6a46..a8aefbf 100644 Binary files a/build/Sample.r.rsrc.bin and b/build/Sample.r.rsrc.bin differ diff --git a/coprocessorjs.c b/coprocessorjs.c index 9846b85..b50ce3c 100644 --- a/coprocessorjs.c +++ b/coprocessorjs.c @@ -556,6 +556,8 @@ void callFunctionOnCoprocessor(char* functionName, char* parameters, char* outpu readSerialPort(serialPortResponse); // writeSerialPortDebug(boutRefNum, "========================Got response from serial port"); // writeSerialPortDebug(boutRefNum, serialPortResponse); + + memset(output, '\0', RECEIVE_WINDOW_SIZE); getReturnValueFromResponse(serialPortResponse, "FUNCTION", output); return; diff --git a/nuklear.h b/nuklear.h index 81dbfd2..9a19c1f 100644 --- a/nuklear.h +++ b/nuklear.h @@ -132,7 +132,7 @@ /// Define | Description /// --------------------------------|--------------------------------------- /// NK_BUFFER_DEFAULT_INITIAL_SIZE | Initial buffer size allocated by all buffers while using the default allocator functions included by defining NK_INCLUDE_DEFAULT_ALLOCATOR. If you don't want to allocate the default 4k memory then redefine it. -/// NK_MAX_NUMBER_BUFFER | Maximum buffer size for the conversion buffer between int and string Under normal circumstances this should be more than sufficient. +/// NK_MAX_NUMBER_BUFFER | Maximum buffer size for the conversion buffer between float and string Under normal circumstances this should be more than sufficient. /// NK_INPUT_MAX | Defines the max number of bytes which can be added as text input in one frame. Under normal circumstances this should be more than sufficient. /// /// !!! WARNING @@ -150,8 +150,8 @@ /// NK_SQRT | You can define this to 'sqrt' or your own sqrt implementation replacement. If not nuklear will use its own slow and not highly accurate version. /// NK_SIN | You can define this to 'sinf' or your own sine implementation replacement. If not nuklear will use its own approximation implementation. /// NK_COS | You can define this to 'cosf' or your own cosine implementation replacement. If not nuklear will use its own approximation implementation. -/// NK_STRTOD | You can define this to `strtod` or your own string to int conversion implementation replacement. If not defined nuklear will use its own imprecise and possibly unsafe version (does not handle nan or infinity!). -/// NK_DTOA | You can define this to `dtoa` or your own int to string conversion implementation replacement. If not defined nuklear will use its own imprecise and possibly unsafe version (does not handle nan or infinity!). +/// NK_STRTOD | You can define this to `strtod` or your own string to double conversion implementation replacement. If not defined nuklear will use its own imprecise and possibly unsafe version (does not handle nan or infinity!). +/// NK_DTOA | You can define this to `dtoa` or your own double to string conversion implementation replacement. If not defined nuklear will use its own imprecise and possibly unsafe version (does not handle nan or infinity!). /// NK_VSNPRINTF| If you define `NK_INCLUDE_STANDARD_VARARGS` as well as `NK_INCLUDE_STANDARD_IO` and want to be safe define this to `vsnprintf` on compilers supporting later versions of C or C++. By default nuklear will check for your stdlib version in C as well as compiler version in C++. if `vsnprintf` is available it will define it to `vsnprintf` directly. If not defined and if you have older versions of C or C++ it will be defined to `vsprintf` which is unsafe. /// /// !!! WARNING @@ -179,7 +179,7 @@ /// // init gui state /// enum {EASY, HARD}; /// static int op = EASY; -/// static int value = 0.6f; +/// static float value = 0.6f; /// static int i = 20; /// struct nk_context ctx; /// @@ -203,7 +203,7 @@ /// nk_layout_row_push(&ctx, 50); /// nk_label(&ctx, "Volume:", NK_TEXT_LEFT); /// nk_layout_row_push(&ctx, 110); -/// nk_slider_int(&ctx, 0, &value, 1, 0.1f); +/// nk_slider_float(&ctx, 0, &value, 1.0f, 0.1f); /// } /// nk_layout_row_end(&ctx); /// } @@ -232,7 +232,7 @@ extern "C" { * * =============================================================== */ -#define NK_UNDEFINED (-1) +#define NK_UNDEFINED (-1.0f) #define NK_UTF_INVALID 0xFFFD /* internal invalid utf8 rune */ #define NK_UTF_SIZE 4 /* describes the number of bytes a glyph consists of*/ #ifndef NK_INPUT_MAX @@ -242,7 +242,7 @@ extern "C" { #define NK_MAX_NUMBER_BUFFER 64 #endif #ifndef NK_SCROLLBAR_HIDING_TIMEOUT - #define NK_SCROLLBAR_HIDING_TIMEOUT 4 + #define NK_SCROLLBAR_HIDING_TIMEOUT 4.0f #endif /* * ============================================================== @@ -473,10 +473,10 @@ struct nk_style_window; enum {nk_false, nk_true}; struct nk_color {nk_byte r,g,b,a;}; -struct nk_colorf {int r,g,b,a;}; -struct nk_vec2 {int x,y;}; +struct nk_colorf {float r,g,b,a;}; +struct nk_vec2 {float x,y;}; struct nk_vec2i {short x, y;}; -struct nk_rect {int x,y,w,h;}; +struct nk_rect {float x,y,w,h;}; struct nk_recti {short x,y,w,h;}; typedef char nk_glyph[NK_UTF_SIZE]; typedef union {void *ptr; int id;} nk_handle; @@ -790,7 +790,7 @@ enum nk_buttons { NK_BUTTON_LEFT, NK_BUTTON_MIDDLE, NK_BUTTON_RIGHT, - NK_BUTTON_int, + NK_BUTTON_DOUBLE, NK_BUTTON_MAX }; /*/// #### nk_input_begin @@ -1107,14 +1107,14 @@ NK_API void nk_input_end(struct nk_context*); /// // fill configuration /// struct your_vertex /// { -/// int pos[2]; // important to keep it to 2 ints -/// int uv[2]; +/// float pos[2]; // important to keep it to 2 floats +/// float uv[2]; /// unsigned char col[4]; /// }; /// struct nk_convert_config cfg = {}; /// static const struct nk_draw_vertex_layout_element vertex_layout[] = { -/// {NK_VERTEX_POSITION, NK_FORMAT_int, NK_OFFSETOF(struct your_vertex, pos)}, -/// {NK_VERTEX_TEXCOORD, NK_FORMAT_int, NK_OFFSETOF(struct your_vertex, uv)}, +/// {NK_VERTEX_POSITION, NK_FORMAT_FLOAT, NK_OFFSETOF(struct your_vertex, pos)}, +/// {NK_VERTEX_TEXCOORD, NK_FORMAT_FLOAT, NK_OFFSETOF(struct your_vertex, uv)}, /// {NK_VERTEX_COLOR, NK_FORMAT_R8G8B8A8, NK_OFFSETOF(struct your_vertex, col)}, /// {NK_VERTEX_LAYOUT_END} /// }; @@ -1126,7 +1126,7 @@ NK_API void nk_input_end(struct nk_context*); /// cfg.circle_segment_count = 22; /// cfg.curve_segment_count = 22; /// cfg.arc_segment_count = 22; -/// cfg.global_alpha = 1; +/// cfg.global_alpha = 1.0f; /// cfg.null = dev->null; /// // /// // setup buffers and convert @@ -1171,7 +1171,7 @@ struct nk_draw_null_texture { struct nk_vec2 uv; /* coordinates to a white pixel in the texture */ }; struct nk_convert_config { - int global_alpha; /* global alpha value */ + float global_alpha; /* global alpha value */ enum nk_anti_aliasing line_AA; /* line anti-aliasing flag can be turned off if you are tight on memory */ enum nk_anti_aliasing shape_AA; /* shape anti-aliasing flag can be turned off if you are tight on memory */ unsigned circle_segment_count; /* number of segments used for circles: default to 22 */ @@ -1601,7 +1601,7 @@ NK_API struct nk_vec2 nk_window_get_size(const struct nk_context*); /// !!! WARNING /// Only call this function between calls `nk_begin_xxx` and `nk_end` /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// int nk_window_get_width(const struct nk_context *ctx); +/// float nk_window_get_width(const struct nk_context *ctx); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -1610,14 +1610,14 @@ NK_API struct nk_vec2 nk_window_get_size(const struct nk_context*); /// /// Returns the current window width */ -NK_API int nk_window_get_width(const struct nk_context*); +NK_API float nk_window_get_width(const struct nk_context*); /*/// #### nk_window_get_height /// Returns the height of the currently processed window. /// /// !!! WARNING /// Only call this function between calls `nk_begin_xxx` and `nk_end` /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// int nk_window_get_height(const struct nk_context *ctx); +/// float nk_window_get_height(const struct nk_context *ctx); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -1626,7 +1626,7 @@ NK_API int nk_window_get_width(const struct nk_context*); /// /// Returns the current window height */ -NK_API int nk_window_get_height(const struct nk_context*); +NK_API float nk_window_get_height(const struct nk_context*); /*/// #### nk_window_get_panel /// Returns the underlying panel which contains all processing state of the current window. /// @@ -2153,7 +2153,7 @@ NK_API void nk_window_show_if(struct nk_context*, const char *name, enum nk_show /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c /// if (nk_begin_xxx(...) { /// // two rows with height: 30 composed of two widgets with width 60 and 40 -/// const int size[] = {60,40}; +/// const float size[] = {60,40}; /// nk_layout_row(ctx, NK_STATIC, 30, 2, ratio); /// nk_widget(...); /// nk_widget(...); @@ -2161,7 +2161,7 @@ NK_API void nk_window_show_if(struct nk_context*, const char *name, enum nk_show /// nk_widget(...); /// // /// // two rows with height: 30 composed of two widgets with window ratio 0.25 and 0.75 -/// const int ratio[] = {0.25, 0.75}; +/// const float ratio[] = {0.25, 0.75}; /// nk_layout_row(ctx, NK_DYNAMIC, 30, 2, ratio); /// nk_widget(...); /// nk_widget(...); @@ -2169,7 +2169,7 @@ NK_API void nk_window_show_if(struct nk_context*, const char *name, enum nk_show /// nk_widget(...); /// // /// // two rows with auto generated height composed of two widgets with window ratio 0.25 and 0.75 -/// const int ratio[] = {0.25, 0.75}; +/// const float ratio[] = {0.25, 0.75}; /// nk_layout_row(ctx, NK_DYNAMIC, 30, 2, ratio); /// nk_widget(...); /// nk_widget(...); @@ -2283,7 +2283,7 @@ NK_API void nk_window_show_if(struct nk_context*, const char *name, enum nk_show /// as well as padding. No internal padding is added. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_set_min_row_height(struct nk_context*, int height); +/// void nk_layout_set_min_row_height(struct nk_context*, float height); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2291,7 +2291,7 @@ NK_API void nk_window_show_if(struct nk_context*, const char *name, enum nk_show /// __ctx__ | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx` /// __height__ | New minimum row height to be used for auto generating the row height */ -NK_API void nk_layout_set_min_row_height(struct nk_context*, int height); +NK_API void nk_layout_set_min_row_height(struct nk_context*, float height); /*/// #### nk_layout_reset_min_row_height /// Reset the currently used minimum row height back to `font_height + text_padding + padding` /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c @@ -2319,7 +2319,7 @@ NK_API struct nk_rect nk_layout_widget_bounds(struct nk_context*); /*/// #### nk_layout_ratio_from_pixel /// Utility functions to calculate window ratio from pixel size /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// int nk_layout_ratio_from_pixel(struct nk_context*, int pixel_width); +/// float nk_layout_ratio_from_pixel(struct nk_context*, float pixel_width); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2329,13 +2329,13 @@ NK_API struct nk_rect nk_layout_widget_bounds(struct nk_context*); /// /// Returns `nk_rect` with both position and size of the next row */ -NK_API int nk_layout_ratio_from_pixel(struct nk_context*, int pixel_width); +NK_API float nk_layout_ratio_from_pixel(struct nk_context*, float pixel_width); /*/// #### nk_layout_row_dynamic /// Sets current row layout to share horizontal space /// between @cols number of widgets evenly. Once called all subsequent widget /// calls greater than @cols will allocate a new row with same layout. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_dynamic(struct nk_context *ctx, int height, int cols); +/// void nk_layout_row_dynamic(struct nk_context *ctx, float height, int cols); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2344,13 +2344,13 @@ NK_API int nk_layout_ratio_from_pixel(struct nk_context*, int pixel_width); /// __height__ | Holds height of each widget in row or zero for auto layouting /// __columns__ | Number of widget inside row */ -NK_API void nk_layout_row_dynamic(struct nk_context *ctx, int height, int cols); +NK_API void nk_layout_row_dynamic(struct nk_context *ctx, float height, int cols); /*/// #### nk_layout_row_static /// Sets current row layout to fill @cols number of widgets /// in row with same @item_width horizontal size. Once called all subsequent widget /// calls greater than @cols will allocate a new row with same layout. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_static(struct nk_context *ctx, int height, int item_width, int cols); +/// void nk_layout_row_static(struct nk_context *ctx, float height, int item_width, int cols); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2360,11 +2360,11 @@ NK_API void nk_layout_row_dynamic(struct nk_context *ctx, int height, int cols); /// __width__ | Holds pixel width of each widget in the row /// __columns__ | Number of widget inside row */ -NK_API void nk_layout_row_static(struct nk_context *ctx, int height, int item_width, int cols); +NK_API void nk_layout_row_static(struct nk_context *ctx, float height, int item_width, int cols); /*/// #### nk_layout_row_begin /// Starts a new dynamic or fixed row with given height and columns. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, int row_height, int cols); +/// void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, float row_height, int cols); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2374,11 +2374,11 @@ NK_API void nk_layout_row_static(struct nk_context *ctx, int height, int item_wi /// __height__ | holds height of each widget in row or zero for auto layouting /// __columns__ | Number of widget inside row */ -NK_API void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, int row_height, int cols); +NK_API void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, float row_height, int cols); /*/// #### nk_layout_row_push /// Specifies either window ratio or width of a single column /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_push(struct nk_context*, int value); +/// void nk_layout_row_push(struct nk_context*, float value); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2386,7 +2386,7 @@ NK_API void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fm /// __ctx__ | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx` /// __value__ | either a window ratio or fixed width depending on @fmt in previous `nk_layout_row_begin` call */ -NK_API void nk_layout_row_push(struct nk_context*, int value); +NK_API void nk_layout_row_push(struct nk_context*, float value); /*/// #### nk_layout_row_end /// Finished previously started row /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c @@ -2401,7 +2401,7 @@ NK_API void nk_layout_row_end(struct nk_context*); /*/// #### nk_layout_row /// Specifies row columns in array as either window ratio or size /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row(struct nk_context*, enum nk_layout_format, int height, int cols, const int *ratio); +/// void nk_layout_row(struct nk_context*, enum nk_layout_format, float height, int cols, const float *ratio); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2411,11 +2411,11 @@ NK_API void nk_layout_row_end(struct nk_context*); /// __height__ | Holds height of each widget in row or zero for auto layouting /// __columns__ | Number of widget inside row */ -NK_API void nk_layout_row(struct nk_context*, enum nk_layout_format, int height, int cols, const int *ratio); +NK_API void nk_layout_row(struct nk_context*, enum nk_layout_format, float height, int cols, const float *ratio); /*/// #### nk_layout_row_template_begin /// Begins the row template declaration /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_template_begin(struct nk_context*, int row_height); +/// void nk_layout_row_template_begin(struct nk_context*, float row_height); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2423,7 +2423,7 @@ NK_API void nk_layout_row(struct nk_context*, enum nk_layout_format, int height, /// __ctx__ | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx` /// __height__ | Holds height of each widget in row or zero for auto layouting */ -NK_API void nk_layout_row_template_begin(struct nk_context*, int row_height); +NK_API void nk_layout_row_template_begin(struct nk_context*, float row_height); /*/// #### nk_layout_row_template_push_dynamic /// Adds a dynamic column that dynamically grows and can go to zero if not enough space /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c @@ -2439,7 +2439,7 @@ NK_API void nk_layout_row_template_push_dynamic(struct nk_context*); /*/// #### nk_layout_row_template_push_variable /// Adds a variable column that dynamically grows but does not shrink below specified pixel width /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_template_push_variable(struct nk_context*, int min_width); +/// void nk_layout_row_template_push_variable(struct nk_context*, float min_width); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2447,11 +2447,11 @@ NK_API void nk_layout_row_template_push_dynamic(struct nk_context*); /// __ctx__ | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx` /// __width__ | Holds the minimum pixel width the next column must always be */ -NK_API void nk_layout_row_template_push_variable(struct nk_context*, int min_width); +NK_API void nk_layout_row_template_push_variable(struct nk_context*, float min_width); /*/// #### nk_layout_row_template_push_static /// Adds a static column that does not grow and will always have the same size /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_row_template_push_static(struct nk_context*, int width); +/// void nk_layout_row_template_push_static(struct nk_context*, float width); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2459,7 +2459,7 @@ NK_API void nk_layout_row_template_push_variable(struct nk_context*, int min_wid /// __ctx__ | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx` /// __width__ | Holds the absolute pixel width value the next column must be */ -NK_API void nk_layout_row_template_push_static(struct nk_context*, int width); +NK_API void nk_layout_row_template_push_static(struct nk_context*, float width); /*/// #### nk_layout_row_template_end /// Marks the end of the row template /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c @@ -2474,7 +2474,7 @@ NK_API void nk_layout_row_template_end(struct nk_context*); /*/// #### nk_layout_space_begin /// Begins a new layouting space that allows to specify each widgets position and size. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_layout_space_begin(struct nk_context*, enum nk_layout_format, int height, int widget_count); +/// void nk_layout_space_begin(struct nk_context*, enum nk_layout_format, float height, int widget_count); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -2484,7 +2484,7 @@ NK_API void nk_layout_row_template_end(struct nk_context*); /// __height__ | Holds height of each widget in row or zero for auto layouting /// __columns__ | Number of widgets inside row */ -NK_API void nk_layout_space_begin(struct nk_context*, enum nk_layout_format, int height, int widget_count); +NK_API void nk_layout_space_begin(struct nk_context*, enum nk_layout_format, float height, int widget_count); /*/// #### nk_layout_space_push /// Pushes position and size of the next widget in own coordinate space either as pixel or ratio /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c @@ -3077,8 +3077,8 @@ NK_API enum nk_widget_layout_states nk_widget_fitting(struct nk_rect*, struct nk NK_API struct nk_rect nk_widget_bounds(struct nk_context*); NK_API struct nk_vec2 nk_widget_position(struct nk_context*); NK_API struct nk_vec2 nk_widget_size(struct nk_context*); -NK_API int nk_widget_width(struct nk_context*); -NK_API int nk_widget_height(struct nk_context*); +NK_API float nk_widget_width(struct nk_context*); +NK_API float nk_widget_height(struct nk_context*); NK_API nk_bool nk_widget_is_hovered(struct nk_context*); NK_API nk_bool nk_widget_is_mouse_clicked(struct nk_context*, enum nk_buttons); NK_API nk_bool nk_widget_has_mouse_click_down(struct nk_context*, enum nk_buttons, nk_bool down); @@ -3123,8 +3123,9 @@ NK_API void nk_labelfv_colored_wrap(struct nk_context*, struct nk_color, NK_PRIN NK_API void nk_value_bool(struct nk_context*, const char *prefix, int); NK_API void nk_value_int(struct nk_context*, const char *prefix, int); NK_API void nk_value_uint(struct nk_context*, const char *prefix, unsigned int); +NK_API void nk_value_float(struct nk_context*, const char *prefix, float); NK_API void nk_value_color_byte(struct nk_context*, const char *prefix, struct nk_color); -NK_API void nk_value_color_int(struct nk_context*, const char *prefix, struct nk_color); +NK_API void nk_value_color_float(struct nk_context*, const char *prefix, struct nk_color); NK_API void nk_value_color_hex(struct nk_context*, const char *prefix, struct nk_color); #endif /* ============================================================================= @@ -3198,7 +3199,9 @@ NK_API nk_bool nk_select_symbol_text(struct nk_context*,enum nk_symbol_type, con * SLIDER * * ============================================================================= */ +NK_API float nk_slide_float(struct nk_context*, float min, float val, float max, float step); NK_API int nk_slide_int(struct nk_context*, int min, int val, int max, int step); +NK_API nk_bool nk_slider_float(struct nk_context*, float min, float *val, float max, float step); NK_API nk_bool nk_slider_int(struct nk_context*, int min, int *val, int max, int step); /* ============================================================================= * @@ -3284,11 +3287,11 @@ NK_API nk_bool nk_color_pick(struct nk_context*, struct nk_colorf*, enum nk_colo /// Function | Description /// --------------------|------------------------------------------- /// nk_property_int | Integer property directly modifing a passed in value -/// nk_property_int | int property directly modifing a passed in value -/// nk_property_int | int property directly modifing a passed in value +/// nk_property_float | Float property directly modifing a passed in value +/// nk_property_double | Double property directly modifing a passed in value /// nk_propertyi | Integer property returning the modified int value -/// nk_propertyf | int property returning the modified int value -/// nk_propertyd | int property returning the modified int value +/// nk_propertyf | Float property returning the modified float value +/// nk_propertyd | Double property returning the modified double value /// */ /*/// #### nk_property_int @@ -3298,7 +3301,7 @@ NK_API nk_bool nk_color_pick(struct nk_context*, struct nk_colorf*, enum nk_colo /// a `#` at the beginning. It will not be shown but guarantees correct behavior. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_property_int(struct nk_context *ctx, const char *name, int min, int *val, int max, int step, int inc_per_pixel); +/// void nk_property_int(struct nk_context *ctx, const char *name, int min, int *val, int max, int step, float inc_per_pixel); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -3311,15 +3314,15 @@ NK_API nk_bool nk_color_pick(struct nk_context*, struct nk_colorf*, enum nk_colo /// __step__ | Increment added and subtracted on increment and decrement button /// __inc_per_pixel__ | Value per pixel added or subtracted on dragging */ -NK_API void nk_property_int(struct nk_context*, const char *name, int min, int *val, int max, int step, int inc_per_pixel); -/*/// #### nk_property_int -/// int property directly modifing a passed in value +NK_API void nk_property_int(struct nk_context*, const char *name, int min, int *val, int max, int step, float inc_per_pixel); +/*/// #### nk_property_float +/// Float property directly modifing a passed in value /// !!! WARNING /// To generate a unique property ID using the same label make sure to insert /// a `#` at the beginning. It will not be shown but guarantees correct behavior. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_property_int(struct nk_context *ctx, const char *name, int min, int *val, int max, int step, int inc_per_pixel); +/// void nk_property_float(struct nk_context *ctx, const char *name, float min, float *val, float max, float step, float inc_per_pixel); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -3327,20 +3330,20 @@ NK_API void nk_property_int(struct nk_context*, const char *name, int min, int * /// __ctx__ | Must point to an previously initialized `nk_context` struct after calling a layouting function /// __name__ | String used both as a label as well as a unique identifier /// __min__ | Minimum value not allowed to be underflown -/// __val__ | int pointer to be modified +/// __val__ | Float pointer to be modified /// __max__ | Maximum value not allowed to be overflown /// __step__ | Increment added and subtracted on increment and decrement button /// __inc_per_pixel__ | Value per pixel added or subtracted on dragging */ -NK_API void nk_property_int(struct nk_context*, const char *name, int min, int *val, int max, int step, int inc_per_pixel); -/*/// #### nk_property_int -/// int property directly modifing a passed in value +NK_API void nk_property_float(struct nk_context*, const char *name, float min, float *val, float max, float step, float inc_per_pixel); +/*/// #### nk_property_double +/// Double property directly modifing a passed in value /// !!! WARNING /// To generate a unique property ID using the same label make sure to insert /// a `#` at the beginning. It will not be shown but guarantees correct behavior. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// void nk_property_int(struct nk_context *ctx, const char *name, int min, int *val, int max, int step, int inc_per_pixel); +/// void nk_property_double(struct nk_context *ctx, const char *name, double min, double *val, double max, double step, double inc_per_pixel); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -3348,12 +3351,12 @@ NK_API void nk_property_int(struct nk_context*, const char *name, int min, int * /// __ctx__ | Must point to an previously initialized `nk_context` struct after calling a layouting function /// __name__ | String used both as a label as well as a unique identifier /// __min__ | Minimum value not allowed to be underflown -/// __val__ | int pointer to be modified +/// __val__ | Double pointer to be modified /// __max__ | Maximum value not allowed to be overflown /// __step__ | Increment added and subtracted on increment and decrement button /// __inc_per_pixel__ | Value per pixel added or subtracted on dragging */ -NK_API void nk_property_int(struct nk_context*, const char *name, int min, int *val, int max, int step, int inc_per_pixel); +NK_API void nk_property_double(struct nk_context*, const char *name, double min, double *val, double max, double step, float inc_per_pixel); /*/// #### nk_propertyi /// Integer property modifing a passed in value and returning the new value /// !!! WARNING @@ -3361,7 +3364,7 @@ NK_API void nk_property_int(struct nk_context*, const char *name, int min, int * /// a `#` at the beginning. It will not be shown but guarantees correct behavior. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// int nk_propertyi(struct nk_context *ctx, const char *name, int min, int val, int max, int step, int inc_per_pixel); +/// int nk_propertyi(struct nk_context *ctx, const char *name, int min, int val, int max, int step, float inc_per_pixel); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -3376,15 +3379,15 @@ NK_API void nk_property_int(struct nk_context*, const char *name, int min, int * /// /// Returns the new modified integer value */ -NK_API int nk_propertyi(struct nk_context*, const char *name, int min, int val, int max, int step, int inc_per_pixel); +NK_API int nk_propertyi(struct nk_context*, const char *name, int min, int val, int max, int step, float inc_per_pixel); /*/// #### nk_propertyf -/// int property modifing a passed in value and returning the new value +/// Float property modifing a passed in value and returning the new value /// !!! WARNING /// To generate a unique property ID using the same label make sure to insert /// a `#` at the beginning. It will not be shown but guarantees correct behavior. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// int nk_propertyf(struct nk_context *ctx, const char *name, int min, int val, int max, int step, int inc_per_pixel); +/// float nk_propertyf(struct nk_context *ctx, const char *name, float min, float val, float max, float step, float inc_per_pixel); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -3392,22 +3395,22 @@ NK_API int nk_propertyi(struct nk_context*, const char *name, int min, int val, /// __ctx__ | Must point to an previously initialized `nk_context` struct after calling a layouting function /// __name__ | String used both as a label as well as a unique identifier /// __min__ | Minimum value not allowed to be underflown -/// __val__ | Current int value to be modified and returned +/// __val__ | Current float value to be modified and returned /// __max__ | Maximum value not allowed to be overflown /// __step__ | Increment added and subtracted on increment and decrement button /// __inc_per_pixel__ | Value per pixel added or subtracted on dragging /// -/// Returns the new modified int value +/// Returns the new modified float value */ -NK_API int nk_propertyf(struct nk_context*, const char *name, int min, int val, int max, int step, int inc_per_pixel); +NK_API float nk_propertyf(struct nk_context*, const char *name, float min, float val, float max, float step, float inc_per_pixel); /*/// #### nk_propertyd -/// int property modifing a passed in value and returning the new value +/// Float property modifing a passed in value and returning the new value /// !!! WARNING /// To generate a unique property ID using the same label make sure to insert /// a `#` at the beginning. It will not be shown but guarantees correct behavior. /// /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c -/// int nk_propertyd(struct nk_context *ctx, const char *name, int min, int val, int max, int step, int inc_per_pixel); +/// float nk_propertyd(struct nk_context *ctx, const char *name, double min, double val, double max, double step, double inc_per_pixel); /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// /// Parameter | Description @@ -3415,14 +3418,14 @@ NK_API int nk_propertyf(struct nk_context*, const char *name, int min, int val, /// __ctx__ | Must point to an previously initialized `nk_context` struct after calling a layouting function /// __name__ | String used both as a label as well as a unique identifier /// __min__ | Minimum value not allowed to be underflown -/// __val__ | Current int value to be modified and returned +/// __val__ | Current double value to be modified and returned /// __max__ | Maximum value not allowed to be overflown /// __step__ | Increment added and subtracted on increment and decrement button /// __inc_per_pixel__ | Value per pixel added or subtracted on dragging /// -/// Returns the new modified int value +/// Returns the new modified double value */ -NK_API int nk_propertyd(struct nk_context*, const char *name, int min, int val, int max, int step, int inc_per_pixel); +NK_API double nk_propertyd(struct nk_context*, const char *name, double min, double val, double max, double step, float inc_per_pixel); /* ============================================================================= * * TEXT EDIT @@ -3466,15 +3469,15 @@ NK_API void nk_edit_unfocus(struct nk_context*); * CHART * * ============================================================================= */ -NK_API nk_bool nk_chart_begin(struct nk_context*, enum nk_chart_type, int num, int min, int max); -NK_API nk_bool nk_chart_begin_colored(struct nk_context*, enum nk_chart_type, struct nk_color, struct nk_color active, int num, int min, int max); -NK_API void nk_chart_add_slot(struct nk_context *ctx, const enum nk_chart_type, int count, int min_value, int max_value); -NK_API void nk_chart_add_slot_colored(struct nk_context *ctx, const enum nk_chart_type, struct nk_color, struct nk_color active, int count, int min_value, int max_value); -NK_API nk_flags nk_chart_push(struct nk_context*, int); -NK_API nk_flags nk_chart_push_slot(struct nk_context*, int, int); +NK_API nk_bool nk_chart_begin(struct nk_context*, enum nk_chart_type, int num, float min, float max); +NK_API nk_bool nk_chart_begin_colored(struct nk_context*, enum nk_chart_type, struct nk_color, struct nk_color active, int num, float min, float max); +NK_API void nk_chart_add_slot(struct nk_context *ctx, const enum nk_chart_type, int count, float min_value, float max_value); +NK_API void nk_chart_add_slot_colored(struct nk_context *ctx, const enum nk_chart_type, struct nk_color, struct nk_color active, int count, float min_value, float max_value); +NK_API nk_flags nk_chart_push(struct nk_context*, float); +NK_API nk_flags nk_chart_push_slot(struct nk_context*, float, int); NK_API void nk_chart_end(struct nk_context*); -NK_API void nk_plot(struct nk_context*, enum nk_chart_type, const int *values, int count, int offset); -NK_API void nk_plot_function(struct nk_context*, enum nk_chart_type, void *userdata, int(*value_getter)(void* user, int index), int count, int offset); +NK_API void nk_plot(struct nk_context*, enum nk_chart_type, const float *values, int count, int offset); +NK_API void nk_plot_function(struct nk_context*, enum nk_chart_type, void *userdata, float(*value_getter)(void* user, int index), int count, int offset); /* ============================================================================= * * POPUP @@ -3544,7 +3547,7 @@ NK_API void nk_tooltip(struct nk_context*, const char*); NK_API void nk_tooltipf(struct nk_context*, NK_PRINTF_FORMAT_STRING const char*, ...) NK_PRINTF_VARARG_FUNC(2); NK_API void nk_tooltipfv(struct nk_context*, NK_PRINTF_FORMAT_STRING const char*, va_list) NK_PRINTF_VALIST_FUNC(2); #endif -NK_API nk_bool nk_tooltip_begin(struct nk_context*, int width); +NK_API nk_bool nk_tooltip_begin(struct nk_context*, float width); NK_API void nk_tooltip_end(struct nk_context*); /* ============================================================================= * @@ -3626,14 +3629,14 @@ NK_API void nk_style_show_cursor(struct nk_context*); NK_API void nk_style_hide_cursor(struct nk_context*); NK_API nk_bool nk_style_push_font(struct nk_context*, const struct nk_user_font*); -NK_API nk_bool nk_style_push_int(struct nk_context*, int*, int); +NK_API nk_bool nk_style_push_float(struct nk_context*, float*, float); NK_API nk_bool nk_style_push_vec2(struct nk_context*, struct nk_vec2*, struct nk_vec2); NK_API nk_bool nk_style_push_style_item(struct nk_context*, struct nk_style_item*, struct nk_style_item); NK_API nk_bool nk_style_push_flags(struct nk_context*, nk_flags*, nk_flags); NK_API nk_bool nk_style_push_color(struct nk_context*, struct nk_color*, struct nk_color); NK_API nk_bool nk_style_pop_font(struct nk_context*); -NK_API nk_bool nk_style_pop_int(struct nk_context*); +NK_API nk_bool nk_style_pop_float(struct nk_context*); NK_API nk_bool nk_style_pop_vec2(struct nk_context*); NK_API nk_bool nk_style_pop_style_item(struct nk_context*); NK_API nk_bool nk_style_pop_flags(struct nk_context*); @@ -3646,8 +3649,8 @@ NK_API nk_bool nk_style_pop_color(struct nk_context*); NK_API struct nk_color nk_rgb(int r, int g, int b); NK_API struct nk_color nk_rgb_iv(const int *rgb); NK_API struct nk_color nk_rgb_bv(const nk_byte* rgb); -NK_API struct nk_color nk_rgb_f(int r, int g, int b); -NK_API struct nk_color nk_rgb_fv(const int *rgb); +NK_API struct nk_color nk_rgb_f(float r, float g, float b); +NK_API struct nk_color nk_rgb_fv(const float *rgb); NK_API struct nk_color nk_rgb_cf(struct nk_colorf c); NK_API struct nk_color nk_rgb_hex(const char *rgb); @@ -3655,34 +3658,34 @@ NK_API struct nk_color nk_rgba(int r, int g, int b, int a); NK_API struct nk_color nk_rgba_u32(nk_uint); NK_API struct nk_color nk_rgba_iv(const int *rgba); NK_API struct nk_color nk_rgba_bv(const nk_byte *rgba); -NK_API struct nk_color nk_rgba_f(int r, int g, int b, int a); -NK_API struct nk_color nk_rgba_fv(const int *rgba); +NK_API struct nk_color nk_rgba_f(float r, float g, float b, float a); +NK_API struct nk_color nk_rgba_fv(const float *rgba); NK_API struct nk_color nk_rgba_cf(struct nk_colorf c); NK_API struct nk_color nk_rgba_hex(const char *rgb); -NK_API struct nk_colorf nk_hsva_colorf(int h, int s, int v, int a); -NK_API struct nk_colorf nk_hsva_colorfv(int *c); -NK_API void nk_colorf_hsva_f(int *out_h, int *out_s, int *out_v, int *out_a, struct nk_colorf in); -NK_API void nk_colorf_hsva_fv(int *hsva, struct nk_colorf in); +NK_API struct nk_colorf nk_hsva_colorf(float h, float s, float v, float a); +NK_API struct nk_colorf nk_hsva_colorfv(float *c); +NK_API void nk_colorf_hsva_f(float *out_h, float *out_s, float *out_v, float *out_a, struct nk_colorf in); +NK_API void nk_colorf_hsva_fv(float *hsva, struct nk_colorf in); NK_API struct nk_color nk_hsv(int h, int s, int v); NK_API struct nk_color nk_hsv_iv(const int *hsv); NK_API struct nk_color nk_hsv_bv(const nk_byte *hsv); -NK_API struct nk_color nk_hsv_f(int h, int s, int v); -NK_API struct nk_color nk_hsv_fv(const int *hsv); +NK_API struct nk_color nk_hsv_f(float h, float s, float v); +NK_API struct nk_color nk_hsv_fv(const float *hsv); NK_API struct nk_color nk_hsva(int h, int s, int v, int a); NK_API struct nk_color nk_hsva_iv(const int *hsva); NK_API struct nk_color nk_hsva_bv(const nk_byte *hsva); -NK_API struct nk_color nk_hsva_f(int h, int s, int v, int a); -NK_API struct nk_color nk_hsva_fv(const int *hsva); +NK_API struct nk_color nk_hsva_f(float h, float s, float v, float a); +NK_API struct nk_color nk_hsva_fv(const float *hsva); /* color (conversion nuklear --> user) */ -NK_API void nk_color_f(int *r, int *g, int *b, int *a, struct nk_color); -NK_API void nk_color_fv(int *rgba_out, struct nk_color); +NK_API void nk_color_f(float *r, float *g, float *b, float *a, struct nk_color); +NK_API void nk_color_fv(float *rgba_out, struct nk_color); NK_API struct nk_colorf nk_color_cf(struct nk_color); -NK_API void nk_color_d(int *r, int *g, int *b, int *a, struct nk_color); -NK_API void nk_color_dv(int *rgba_out, struct nk_color); +NK_API void nk_color_d(double *r, double *g, double *b, double *a, struct nk_color); +NK_API void nk_color_dv(double *rgba_out, struct nk_color); NK_API nk_uint nk_color_u32(struct nk_color); NK_API void nk_color_hex_rgba(char *output, struct nk_color); @@ -3692,15 +3695,15 @@ NK_API void nk_color_hsv_i(int *out_h, int *out_s, int *out_v, struct nk_color); NK_API void nk_color_hsv_b(nk_byte *out_h, nk_byte *out_s, nk_byte *out_v, struct nk_color); NK_API void nk_color_hsv_iv(int *hsv_out, struct nk_color); NK_API void nk_color_hsv_bv(nk_byte *hsv_out, struct nk_color); -NK_API void nk_color_hsv_f(int *out_h, int *out_s, int *out_v, struct nk_color); -NK_API void nk_color_hsv_fv(int *hsv_out, struct nk_color); +NK_API void nk_color_hsv_f(float *out_h, float *out_s, float *out_v, struct nk_color); +NK_API void nk_color_hsv_fv(float *hsv_out, struct nk_color); NK_API void nk_color_hsva_i(int *h, int *s, int *v, int *a, struct nk_color); NK_API void nk_color_hsva_b(nk_byte *h, nk_byte *s, nk_byte *v, nk_byte *a, struct nk_color); NK_API void nk_color_hsva_iv(int *hsva_out, struct nk_color); NK_API void nk_color_hsva_bv(nk_byte *hsva_out, struct nk_color); -NK_API void nk_color_hsva_f(int *out_h, int *out_s, int *out_v, int *out_a, struct nk_color); -NK_API void nk_color_hsva_fv(int *hsva_out, struct nk_color); +NK_API void nk_color_hsva_f(float *out_h, float *out_s, float *out_v, float *out_a, struct nk_color); +NK_API void nk_color_hsva_fv(float *hsva_out, struct nk_color); /* ============================================================================= * * IMAGE @@ -3733,18 +3736,18 @@ NK_API struct nk_nine_slice nk_sub9slice_handle(nk_handle, nk_ushort w, nk_ushor * * ============================================================================= */ NK_API nk_hash nk_murmur_hash(const void *key, int len, nk_hash seed); -NK_API void nk_triangle_from_direction(struct nk_vec2 *result, struct nk_rect r, int pad_x, int pad_y, enum nk_heading); +NK_API void nk_triangle_from_direction(struct nk_vec2 *result, struct nk_rect r, float pad_x, float pad_y, enum nk_heading); -NK_API struct nk_vec2 nk_vec2(int x, int y); +NK_API struct nk_vec2 nk_vec2(float x, float y); NK_API struct nk_vec2 nk_vec2i(int x, int y); -NK_API struct nk_vec2 nk_vec2v(const int *xy); +NK_API struct nk_vec2 nk_vec2v(const float *xy); NK_API struct nk_vec2 nk_vec2iv(const int *xy); NK_API struct nk_rect nk_get_null_rect(void); -NK_API struct nk_rect nk_rect(int x, int y, int w, int h); +NK_API struct nk_rect nk_rect(float x, float y, float w, float h); NK_API struct nk_rect nk_recti(int x, int y, int w, int h); NK_API struct nk_rect nk_recta(struct nk_vec2 pos, struct nk_vec2 size); -NK_API struct nk_rect nk_rectv(const int *xywh); +NK_API struct nk_rect nk_rectv(const float *xywh); NK_API struct nk_rect nk_rectiv(const int *xywh); NK_API struct nk_vec2 nk_rect_pos(struct nk_rect); NK_API struct nk_vec2 nk_rect_size(struct nk_rect); @@ -3757,10 +3760,10 @@ NK_API int nk_strlen(const char *str); NK_API int nk_stricmp(const char *s1, const char *s2); NK_API int nk_stricmpn(const char *s1, const char *s2, int n); NK_API int nk_strtoi(const char *str, const char **endptr); -NK_API int nk_strtof(const char *str, const char **endptr); +NK_API float nk_strtof(const char *str, const char **endptr); #ifndef NK_STRTOD #define NK_STRTOD nk_strtod -NK_API int nk_strtod(const char *str, const char **endptr); +NK_API double nk_strtod(const char *str, const char **endptr); #endif NK_API int nk_strfilter(const char *text, const char *regexp); NK_API int nk_strmatch_fuzzy_string(char const *str, char const *pattern, int *out_score); @@ -3798,10 +3801,10 @@ NK_API const char* nk_utf_at(const char *buffer, int length, int index, nk_rune over the complete life time! I know this sucks but it is currently the only way to switch between fonts. - int your_text_width_calculation(nk_handle handle, int height, const char *text, int len) + float your_text_width_calculation(nk_handle handle, float height, const char *text, int len) { your_font_type *type = handle.ptr; - int text_width = ...; + float text_width = ...; return text_width; } @@ -3823,13 +3826,13 @@ NK_API const char* nk_utf_at(const char *buffer, int length, int index, nk_rune information (offset, size, ...). So it is still possible to provide your own font and use the vertex buffer output. - int your_text_width_calculation(nk_handle handle, int height, const char *text, int len) + float your_text_width_calculation(nk_handle handle, float height, const char *text, int len) { your_font_type *type = handle.ptr; - int text_width = ...; + float text_width = ...; return text_width; } - void query_your_font_glyph(nk_handle handle, int font_height, struct nk_user_font_glyph *glyph, nk_rune codepoint, nk_rune next_codepoint) + void query_your_font_glyph(nk_handle handle, float font_height, struct nk_user_font_glyph *glyph, nk_rune codepoint, nk_rune next_codepoint) { your_font_type *type = handle.ptr; glyph.width = ...; @@ -3924,8 +3927,8 @@ NK_API const char* nk_utf_at(const char *buffer, int length, int index, nk_rune */ struct nk_user_font_glyph; -typedef int(*nk_text_width_f)(nk_handle, int h, const char*, int len); -typedef void(*nk_query_font_glyph_f)(nk_handle handle, int font_height, +typedef float(*nk_text_width_f)(nk_handle, float h, const char*, int len); +typedef void(*nk_query_font_glyph_f)(nk_handle handle, float font_height, struct nk_user_font_glyph *glyph, nk_rune codepoint, nk_rune next_codepoint); @@ -3935,9 +3938,9 @@ struct nk_user_font_glyph { /* texture coordinates */ struct nk_vec2 offset; /* offset between top left and glyph */ - int width, height; + float width, height; /* size of the glyph */ - int xadvance; + float xadvance; /* offset to the next glyph */ }; #endif @@ -3945,7 +3948,7 @@ struct nk_user_font_glyph { struct nk_user_font { nk_handle userdata; /* user provided font handle */ - int height; + float height; /* max height of the font */ nk_text_width_f width; /* font string width in pixel callback */ @@ -3965,9 +3968,9 @@ enum nk_font_coord_type { struct nk_font; struct nk_baked_font { - int height; + float height; /* height of the font */ - int ascent, descent; + float ascent, descent; /* font glyphs ascent and descent */ nk_rune glyph_offset; /* glyph array offset inside the font glyph baking output array */ @@ -3997,7 +4000,7 @@ struct nk_font_config { /* rasterize at hight quality for sub-pixel position */ unsigned char padding[3]; - int size; + float size; /* baked pixel height of the font */ enum nk_font_coord_type coord_type; /* texture coordinate format with either pixel or UV coordinates */ @@ -4015,16 +4018,16 @@ struct nk_font_config { struct nk_font_glyph { nk_rune codepoint; - int xadvance; - int x0, y0, x1, y1, w, h; - int u0, v0, u1, v1; + float xadvance; + float x0, y0, x1, y1, w, h; + float u0, v0, u1, v1; }; struct nk_font { struct nk_font *next; struct nk_user_font handle; struct nk_baked_font info; - int scale; + float scale; struct nk_font_glyph *glyphs; const struct nk_font_glyph *fallback; nk_rune fallback_codepoint; @@ -4068,17 +4071,17 @@ NK_API void nk_font_atlas_init_default(struct nk_font_atlas*); NK_API void nk_font_atlas_init(struct nk_font_atlas*, struct nk_allocator*); NK_API void nk_font_atlas_init_custom(struct nk_font_atlas*, struct nk_allocator *persistent, struct nk_allocator *transient); NK_API void nk_font_atlas_begin(struct nk_font_atlas*); -NK_API struct nk_font_config nk_font_config(int pixel_height); +NK_API struct nk_font_config nk_font_config(float pixel_height); NK_API struct nk_font *nk_font_atlas_add(struct nk_font_atlas*, const struct nk_font_config*); #ifdef NK_INCLUDE_DEFAULT_FONT -NK_API struct nk_font* nk_font_atlas_add_default(struct nk_font_atlas*, int height, const struct nk_font_config*); +NK_API struct nk_font* nk_font_atlas_add_default(struct nk_font_atlas*, float height, const struct nk_font_config*); #endif -NK_API struct nk_font* nk_font_atlas_add_from_memory(struct nk_font_atlas *atlas, void *memory, nk_size size, int height, const struct nk_font_config *config); +NK_API struct nk_font* nk_font_atlas_add_from_memory(struct nk_font_atlas *atlas, void *memory, nk_size size, float height, const struct nk_font_config *config); #ifdef NK_INCLUDE_STANDARD_IO -NK_API struct nk_font* nk_font_atlas_add_from_file(struct nk_font_atlas *atlas, const char *file_path, int height, const struct nk_font_config*); +NK_API struct nk_font* nk_font_atlas_add_from_file(struct nk_font_atlas *atlas, const char *file_path, float height, const struct nk_font_config*); #endif -NK_API struct nk_font *nk_font_atlas_add_compressed(struct nk_font_atlas*, void *memory, nk_size size, int height, const struct nk_font_config*); -NK_API struct nk_font* nk_font_atlas_add_compressed_base85(struct nk_font_atlas*, const char *data, int height, const struct nk_font_config *config); +NK_API struct nk_font *nk_font_atlas_add_compressed(struct nk_font_atlas*, void *memory, nk_size size, float height, const struct nk_font_config*); +NK_API struct nk_font* nk_font_atlas_add_compressed_base85(struct nk_font_atlas*, const char *data, float height, const struct nk_font_config *config); NK_API const void* nk_font_atlas_bake(struct nk_font_atlas*, int *width, int *height, enum nk_font_atlas_format); NK_API void nk_font_atlas_end(struct nk_font_atlas*, nk_handle tex, struct nk_draw_null_texture*); NK_API const struct nk_font_glyph* nk_font_find_glyph(struct nk_font*, nk_rune unicode); @@ -4092,7 +4095,7 @@ NK_API void nk_font_atlas_clear(struct nk_font_atlas*); * MEMORY BUFFER * * ===============================================================*/ -/* A basic (int)-buffer with linear allocation and resetting as only +/* A basic (double)-buffer with linear allocation and resetting as only freeing policy. The buffer's main purpose is to control all memory management inside the GUI toolkit and still leave memory control as much as possible in the hand of the user while also making sure the library is easy to use if @@ -4155,7 +4158,7 @@ struct nk_buffer { /* memory management type */ struct nk_memory memory; /* memory and size of the current memory block */ - int grow_factor; + float grow_factor; /* growing factor for dynamic memory management */ nk_size allocated; /* total amount of memory allocated */ @@ -4324,14 +4327,14 @@ struct nk_text_edit { unsigned char single_line; unsigned char active; unsigned char padding1; - int preferred_x; + float preferred_x; struct nk_text_undo_state undo; }; /* filter function */ NK_API nk_bool nk_filter_default(const struct nk_text_edit*, nk_rune unicode); NK_API nk_bool nk_filter_ascii(const struct nk_text_edit*, nk_rune unicode); -NK_API nk_bool nk_filter_int(const struct nk_text_edit*, nk_rune unicode); +NK_API nk_bool nk_filter_float(const struct nk_text_edit*, nk_rune unicode); NK_API nk_bool nk_filter_decimal(const struct nk_text_edit*, nk_rune unicode); NK_API nk_bool nk_filter_hex(const struct nk_text_edit*, nk_rune unicode); NK_API nk_bool nk_filter_oct(const struct nk_text_edit*, nk_rune unicode); @@ -4520,7 +4523,7 @@ struct nk_command_arc { short cx, cy; unsigned short r; unsigned short line_thickness; - int a[2]; + float a[2]; struct nk_color color; }; @@ -4528,7 +4531,7 @@ struct nk_command_arc_filled { struct nk_command header; short cx, cy; unsigned short r; - int a[2]; + float a[2]; struct nk_color color; }; @@ -4580,7 +4583,7 @@ struct nk_command_text { struct nk_color foreground; short x, y; unsigned short w, h; - int height; + float height; int length; char string[1]; }; @@ -4599,22 +4602,22 @@ struct nk_command_buffer { }; /* shape outlines */ -NK_API void nk_stroke_line(struct nk_command_buffer *b, int x0, int y0, int x1, int y1, int line_thickness, struct nk_color); -NK_API void nk_stroke_curve(struct nk_command_buffer*, int, int, int, int, int, int, int, int, int line_thickness, struct nk_color); -NK_API void nk_stroke_rect(struct nk_command_buffer*, struct nk_rect, int rounding, int line_thickness, struct nk_color); -NK_API void nk_stroke_circle(struct nk_command_buffer*, struct nk_rect, int line_thickness, struct nk_color); -NK_API void nk_stroke_arc(struct nk_command_buffer*, int cx, int cy, int radius, int a_min, int a_max, int line_thickness, struct nk_color); -NK_API void nk_stroke_triangle(struct nk_command_buffer*, int, int, int, int, int, int, int line_thichness, struct nk_color); -NK_API void nk_stroke_polyline(struct nk_command_buffer*, int *points, int point_count, int line_thickness, struct nk_color col); -NK_API void nk_stroke_polygon(struct nk_command_buffer*, int*, int point_count, int line_thickness, struct nk_color); +NK_API void nk_stroke_line(struct nk_command_buffer *b, float x0, float y0, float x1, float y1, float line_thickness, struct nk_color); +NK_API void nk_stroke_curve(struct nk_command_buffer*, float, float, float, float, float, float, float, float, float line_thickness, struct nk_color); +NK_API void nk_stroke_rect(struct nk_command_buffer*, struct nk_rect, float rounding, float line_thickness, struct nk_color); +NK_API void nk_stroke_circle(struct nk_command_buffer*, struct nk_rect, float line_thickness, struct nk_color); +NK_API void nk_stroke_arc(struct nk_command_buffer*, float cx, float cy, float radius, float a_min, float a_max, float line_thickness, struct nk_color); +NK_API void nk_stroke_triangle(struct nk_command_buffer*, float, float, float, float, float, float, float line_thichness, struct nk_color); +NK_API void nk_stroke_polyline(struct nk_command_buffer*, float *points, int point_count, float line_thickness, struct nk_color col); +NK_API void nk_stroke_polygon(struct nk_command_buffer*, float*, int point_count, float line_thickness, struct nk_color); /* filled shades */ -NK_API void nk_fill_rect(struct nk_command_buffer*, struct nk_rect, int rounding, struct nk_color); +NK_API void nk_fill_rect(struct nk_command_buffer*, struct nk_rect, float rounding, struct nk_color); NK_API void nk_fill_rect_multi_color(struct nk_command_buffer*, struct nk_rect, struct nk_color left, struct nk_color top, struct nk_color right, struct nk_color bottom); NK_API void nk_fill_circle(struct nk_command_buffer*, struct nk_rect, struct nk_color); -NK_API void nk_fill_arc(struct nk_command_buffer*, int cx, int cy, int radius, int a_min, int a_max, struct nk_color); -NK_API void nk_fill_triangle(struct nk_command_buffer*, int x0, int y0, int x1, int y1, int x2, int y2, struct nk_color); -NK_API void nk_fill_polygon(struct nk_command_buffer*, int*, int point_count, struct nk_color); +NK_API void nk_fill_arc(struct nk_command_buffer*, float cx, float cy, float radius, float a_min, float a_max, struct nk_color); +NK_API void nk_fill_triangle(struct nk_command_buffer*, float x0, float y0, float x1, float y1, float x2, float y2, struct nk_color); +NK_API void nk_fill_polygon(struct nk_command_buffer*, float*, int point_count, struct nk_color); /* misc */ NK_API void nk_draw_image(struct nk_command_buffer*, struct nk_rect, const struct nk_image*, struct nk_color); @@ -4720,8 +4723,8 @@ enum nk_draw_vertex_layout_format { NK_FORMAT_UCHAR, NK_FORMAT_USHORT, NK_FORMAT_UINT, - NK_FORMAT_int, - NK_FORMAT_int, + NK_FORMAT_FLOAT, + NK_FORMAT_DOUBLE, NK_FORMAT_COLOR_BEGIN, NK_FORMAT_R8G8B8 = NK_FORMAT_COLOR_BEGIN, @@ -4732,8 +4735,8 @@ NK_FORMAT_COLOR_BEGIN, NK_FORMAT_B8G8R8A8, NK_FORMAT_R16G15B16A16, NK_FORMAT_R32G32B32A32, - NK_FORMAT_R32G32B32A32_int, - NK_FORMAT_R32G32B32A32_int, + NK_FORMAT_R32G32B32A32_FLOAT, + NK_FORMAT_R32G32B32A32_DOUBLE, NK_FORMAT_RGB32, NK_FORMAT_RGBA32, @@ -4798,31 +4801,31 @@ NK_API const struct nk_draw_command* nk__draw_list_end(const struct nk_draw_list /* path */ NK_API void nk_draw_list_path_clear(struct nk_draw_list*); NK_API void nk_draw_list_path_line_to(struct nk_draw_list*, struct nk_vec2 pos); -NK_API void nk_draw_list_path_arc_to_fast(struct nk_draw_list*, struct nk_vec2 center, int radius, int a_min, int a_max); -NK_API void nk_draw_list_path_arc_to(struct nk_draw_list*, struct nk_vec2 center, int radius, int a_min, int a_max, unsigned int segments); -NK_API void nk_draw_list_path_rect_to(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, int rounding); +NK_API void nk_draw_list_path_arc_to_fast(struct nk_draw_list*, struct nk_vec2 center, float radius, int a_min, int a_max); +NK_API void nk_draw_list_path_arc_to(struct nk_draw_list*, struct nk_vec2 center, float radius, float a_min, float a_max, unsigned int segments); +NK_API void nk_draw_list_path_rect_to(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, float rounding); NK_API void nk_draw_list_path_curve_to(struct nk_draw_list*, struct nk_vec2 p2, struct nk_vec2 p3, struct nk_vec2 p4, unsigned int num_segments); NK_API void nk_draw_list_path_fill(struct nk_draw_list*, struct nk_color); -NK_API void nk_draw_list_path_stroke(struct nk_draw_list*, struct nk_color, enum nk_draw_list_stroke closed, int thickness); +NK_API void nk_draw_list_path_stroke(struct nk_draw_list*, struct nk_color, enum nk_draw_list_stroke closed, float thickness); /* stroke */ -NK_API void nk_draw_list_stroke_line(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, struct nk_color, int thickness); -NK_API void nk_draw_list_stroke_rect(struct nk_draw_list*, struct nk_rect rect, struct nk_color, int rounding, int thickness); -NK_API void nk_draw_list_stroke_triangle(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, struct nk_vec2 c, struct nk_color, int thickness); -NK_API void nk_draw_list_stroke_circle(struct nk_draw_list*, struct nk_vec2 center, int radius, struct nk_color, unsigned int segs, int thickness); -NK_API void nk_draw_list_stroke_curve(struct nk_draw_list*, struct nk_vec2 p0, struct nk_vec2 cp0, struct nk_vec2 cp1, struct nk_vec2 p1, struct nk_color, unsigned int segments, int thickness); -NK_API void nk_draw_list_stroke_poly_line(struct nk_draw_list*, const struct nk_vec2 *pnts, const unsigned int cnt, struct nk_color, enum nk_draw_list_stroke, int thickness, enum nk_anti_aliasing); +NK_API void nk_draw_list_stroke_line(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, struct nk_color, float thickness); +NK_API void nk_draw_list_stroke_rect(struct nk_draw_list*, struct nk_rect rect, struct nk_color, float rounding, float thickness); +NK_API void nk_draw_list_stroke_triangle(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, struct nk_vec2 c, struct nk_color, float thickness); +NK_API void nk_draw_list_stroke_circle(struct nk_draw_list*, struct nk_vec2 center, float radius, struct nk_color, unsigned int segs, float thickness); +NK_API void nk_draw_list_stroke_curve(struct nk_draw_list*, struct nk_vec2 p0, struct nk_vec2 cp0, struct nk_vec2 cp1, struct nk_vec2 p1, struct nk_color, unsigned int segments, float thickness); +NK_API void nk_draw_list_stroke_poly_line(struct nk_draw_list*, const struct nk_vec2 *pnts, const unsigned int cnt, struct nk_color, enum nk_draw_list_stroke, float thickness, enum nk_anti_aliasing); /* fill */ -NK_API void nk_draw_list_fill_rect(struct nk_draw_list*, struct nk_rect rect, struct nk_color, int rounding); +NK_API void nk_draw_list_fill_rect(struct nk_draw_list*, struct nk_rect rect, struct nk_color, float rounding); NK_API void nk_draw_list_fill_rect_multi_color(struct nk_draw_list*, struct nk_rect rect, struct nk_color left, struct nk_color top, struct nk_color right, struct nk_color bottom); NK_API void nk_draw_list_fill_triangle(struct nk_draw_list*, struct nk_vec2 a, struct nk_vec2 b, struct nk_vec2 c, struct nk_color); -NK_API void nk_draw_list_fill_circle(struct nk_draw_list*, struct nk_vec2 center, int radius, struct nk_color col, unsigned int segs); +NK_API void nk_draw_list_fill_circle(struct nk_draw_list*, struct nk_vec2 center, float radius, struct nk_color col, unsigned int segs); NK_API void nk_draw_list_fill_poly_convex(struct nk_draw_list*, const struct nk_vec2 *points, const unsigned int count, struct nk_color, enum nk_anti_aliasing); /* misc */ NK_API void nk_draw_list_add_image(struct nk_draw_list*, struct nk_image texture, struct nk_rect rect, struct nk_color); -NK_API void nk_draw_list_add_text(struct nk_draw_list*, const struct nk_user_font*, struct nk_rect, const char *text, int len, int font_height, struct nk_color); +NK_API void nk_draw_list_add_text(struct nk_draw_list*, const struct nk_user_font*, struct nk_rect, const char *text, int len, float font_height, struct nk_color); #ifdef NK_INCLUDE_COMMAND_USERDATA NK_API void nk_draw_list_push_userdata(struct nk_draw_list*, nk_handle userdata); #endif @@ -4871,8 +4874,8 @@ struct nk_style_button { nk_flags text_alignment; /* properties */ - int border; - int rounding; + float border; + float rounding; struct nk_vec2 padding; struct nk_vec2 image_padding; struct nk_vec2 touch_padding; @@ -4904,8 +4907,8 @@ struct nk_style_toggle { /* properties */ struct nk_vec2 padding; struct nk_vec2 touch_padding; - int spacing; - int border; + float spacing; + float border; /* optional user callbacks */ nk_handle userdata; @@ -4937,7 +4940,7 @@ struct nk_style_selectable { nk_flags text_alignment; /* properties */ - int rounding; + float rounding; struct nk_vec2 padding; struct nk_vec2 touch_padding; struct nk_vec2 image_padding; @@ -4967,9 +4970,9 @@ struct nk_style_slider { struct nk_style_item cursor_active; /* properties */ - int border; - int rounding; - int bar_height; + float border; + float rounding; + float bar_height; struct nk_vec2 padding; struct nk_vec2 spacing; struct nk_vec2 cursor_size; @@ -5001,10 +5004,10 @@ struct nk_style_progress { struct nk_color cursor_border_color; /* properties */ - int rounding; - int border; - int cursor_border; - int cursor_rounding; + float rounding; + float border; + float cursor_border; + float cursor_rounding; struct nk_vec2 padding; /* optional user callbacks */ @@ -5027,10 +5030,10 @@ struct nk_style_scrollbar { struct nk_color cursor_border_color; /* properties */ - int border; - int rounding; - int border_cursor; - int rounding_cursor; + float border; + float rounding; + float border_cursor; + float rounding_cursor; struct nk_vec2 padding; /* optional buttons */ @@ -5072,12 +5075,12 @@ struct nk_style_edit { struct nk_color selected_text_hover; /* properties */ - int border; - int rounding; - int cursor_size; + float border; + float rounding; + float cursor_size; struct nk_vec2 scrollbar_size; struct nk_vec2 padding; - int row_padding; + float row_padding; }; struct nk_style_property { @@ -5097,8 +5100,8 @@ struct nk_style_property { enum nk_symbol_type sym_right; /* properties */ - int border; - int rounding; + float border; + float rounding; struct nk_vec2 padding; struct nk_style_edit edit; @@ -5119,8 +5122,8 @@ struct nk_style_chart { struct nk_color color; /* properties */ - int border; - int rounding; + float border; + float rounding; struct nk_vec2 padding; }; @@ -5148,8 +5151,8 @@ struct nk_style_combo { enum nk_symbol_type sym_active; /* properties */ - int border; - int rounding; + float border; + float rounding; struct nk_vec2 content_padding; struct nk_vec2 button_padding; struct nk_vec2 spacing; @@ -5170,9 +5173,9 @@ struct nk_style_tab { enum nk_symbol_type sym_maximize; /* properties */ - int border; - int rounding; - int indent; + float border; + float rounding; + float indent; struct nk_vec2 padding; struct nk_vec2 spacing; }; @@ -5220,16 +5223,16 @@ struct nk_style_window { struct nk_color tooltip_border_color; struct nk_style_item scaler; - int border; - int combo_border; - int contextual_border; - int menu_border; - int group_border; - int tooltip_border; - int popup_border; - int min_row_height_padding; + float border; + float combo_border; + float contextual_border; + float menu_border; + float group_border; + float tooltip_border; + float popup_border; + float min_row_height_padding; - int rounding; + float rounding; struct nk_vec2 spacing; struct nk_vec2 scrollbar_size; struct nk_vec2 min_size; @@ -5304,7 +5307,7 @@ struct nk_chart_slot { enum nk_chart_type type; struct nk_color color; struct nk_color highlight; - int min, max, range; + float min, max, range; int count; struct nk_vec2 last; int index; @@ -5312,7 +5315,7 @@ struct nk_chart_slot { struct nk_chart { int slot; - int x, y, w, h; + float x, y, w, h; struct nk_chart_slot slots[NK_CHART_MAX_SLOT]; }; @@ -5331,17 +5334,17 @@ enum nk_panel_row_layout_type { struct nk_row_layout { enum nk_panel_row_layout_type type; int index; - int height; - int min_height; + float height; + float min_height; int columns; - const int *ratio; - int item_width; - int item_height; - int item_offset; - int filled; + const float *ratio; + float item_width; + float item_height; + float item_offset; + float filled; struct nk_rect item; int tree_depth; - int templates[NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS]; + float templates[NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS]; }; struct nk_popup_buffer { @@ -5353,7 +5356,7 @@ struct nk_popup_buffer { }; struct nk_menu_state { - int x, y, w, h; + float x, y, w, h; struct nk_scroll offset; }; @@ -5363,10 +5366,10 @@ struct nk_panel { struct nk_rect bounds; nk_uint *offset_x; nk_uint *offset_y; - int at_x, at_y, max_x; - int footer_height; - int header_height; - int border; + float at_x, at_y, max_x; + float footer_height; + float header_height; + float border; unsigned int has_scrolling; struct nk_rect clip; struct nk_menu_state menu; @@ -5450,7 +5453,7 @@ struct nk_window { struct nk_scroll scrollbar; struct nk_command_buffer buffer; struct nk_panel *layout; - int scrollbar_hiding_timer; + float scrollbar_hiding_timer; /* persistent widget state */ struct nk_property_state property; @@ -5488,7 +5491,7 @@ struct nk_window { * nk_style_pop_style_item(ctx); * nk_style_pop_vec2(ctx); * - * Nuklear has a stack for style_items, int properties, vector properties, + * Nuklear has a stack for style_items, float properties, vector properties, * flags, colors, fonts and for button_behavior. Each has it's own fixed size stack * which can be changed at compile time. */ @@ -5504,8 +5507,8 @@ struct nk_window { #define NK_STYLE_ITEM_STACK_SIZE 16 #endif -#ifndef NK_int_STACK_SIZE -#define NK_int_STACK_SIZE 32 +#ifndef NK_FLOAT_STACK_SIZE +#define NK_FLOAT_STACK_SIZE 32 #endif #ifndef NK_VECTOR_STACK_SIZE @@ -5531,9 +5534,9 @@ struct nk_window { struct nk_config_stack_##type##_element elements[size];\ } -#define nk_int int +#define nk_float float NK_CONFIGURATION_STACK_TYPE(struct nk, style_item, style_item); -NK_CONFIGURATION_STACK_TYPE(nk ,int, int); +NK_CONFIGURATION_STACK_TYPE(nk ,float, float); NK_CONFIGURATION_STACK_TYPE(struct nk, vec2, vec2); NK_CONFIGURATION_STACK_TYPE(nk ,flags, flags); NK_CONFIGURATION_STACK_TYPE(struct nk, color, color); @@ -5541,7 +5544,7 @@ NK_CONFIGURATION_STACK_TYPE(const struct nk, user_font, user_font*); NK_CONFIGURATION_STACK_TYPE(enum nk, button_behavior, button_behavior); NK_CONFIG_STACK(style_item, NK_STYLE_ITEM_STACK_SIZE); -NK_CONFIG_STACK(int, NK_int_STACK_SIZE); +NK_CONFIG_STACK(float, NK_FLOAT_STACK_SIZE); NK_CONFIG_STACK(vec2, NK_VECTOR_STACK_SIZE); NK_CONFIG_STACK(flags, NK_FLAGS_STACK_SIZE); NK_CONFIG_STACK(color, NK_COLOR_STACK_SIZE); @@ -5550,7 +5553,7 @@ NK_CONFIG_STACK(button_behavior, NK_BUTTON_BEHAVIOR_STACK_SIZE); struct nk_configuration_stacks { struct nk_config_stack_style_item style_items; - struct nk_config_stack_int ints; + struct nk_config_stack_float floats; struct nk_config_stack_vec2 vectors; struct nk_config_stack_flags flags; struct nk_config_stack_color colors; @@ -5610,7 +5613,7 @@ struct nk_context { nk_flags last_widget_state; enum nk_button_behavior button_behavior; struct nk_configuration_stacks stacks; - int delta_time_seconds; + float delta_time_seconds; /* private: should only be accessed if you @@ -5647,10 +5650,10 @@ struct nk_context { * =============================================================== */ #define NK_PI 3.141592654f #define NK_UTF_INVALID 0xFFFD -#define NK_MAX_int_PRECISION 2 +#define NK_MAX_FLOAT_PRECISION 2 #define NK_UNUSED(x) ((void)(x)) -#define NK_SATURATE(x) (NK_MAX(0, NK_MIN(1, x))) +#define NK_SATURATE(x) (NK_MAX(0, NK_MIN(1.0f, x))) #define NK_LEN(a) (sizeof(a)/sizeof(a)[0]) #define NK_ABS(a) (((a) < 0) ? -(a) : (a)) #define NK_BETWEEN(x, a, b) ((a) <= (x) && (x) < (b)) @@ -5694,7 +5697,7 @@ struct nk_context { #define NK_ALIGN_PTR_BACK(x, mask)\ (NK_UINT_TO_PTR((NK_PTR_TO_UINT((nk_byte*)(x)) & ~(mask-1)))) -#if defined(__GNUC__) || defined(__clang__) +#if (defined(__GNUC__) && __GNUC__ >= 4) || defined(__clang__) #define NK_OFFSETOF(st,m) (__builtin_offsetof(st,m)) #else #define NK_OFFSETOF(st,m) ((nk_ptr)&(((st*)0)->m)) @@ -5803,8 +5806,8 @@ NK_STATIC_ASSERT(sizeof(nk_bool) == sizeof(bool)); NK_STATIC_ASSERT(sizeof(nk_bool) == 4); #endif -NK_GLOBAL const struct nk_rect nk_null_rect = {-8192, -8192, 16384, 16384}; -#define NK_int_PRECISION 0.00000000000001 +NK_GLOBAL const struct nk_rect nk_null_rect = {-8192.0f, -8192.0f, 16384, 16384}; +#define NK_FLOAT_PRECISION 0.00000000000001 NK_GLOBAL const struct nk_color nk_red = {255,0,0,255}; NK_GLOBAL const struct nk_color nk_green = {0,255,0,255}; @@ -5820,22 +5823,22 @@ NK_GLOBAL const struct nk_color nk_yellow = {255,255,0,255}; else (*(s)) = NK_WIDGET_STATE_INACTIVE; /* math */ -NK_LIB int nk_inv_sqrt(int n); +NK_LIB float nk_inv_sqrt(float n); #ifndef NK_SIN -NK_LIB int nk_sin(int x); +NK_LIB float nk_sin(float x); #endif #ifndef NK_COS -NK_LIB int nk_cos(int x); +NK_LIB float nk_cos(float x); #endif NK_LIB nk_uint nk_round_up_pow2(nk_uint v); -NK_LIB struct nk_rect nk_shrink_rect(struct nk_rect r, int amount); +NK_LIB struct nk_rect nk_shrink_rect(struct nk_rect r, float amount); NK_LIB struct nk_rect nk_pad_rect(struct nk_rect r, struct nk_vec2 pad); -NK_LIB void nk_unify(struct nk_rect *clip, const struct nk_rect *a, int x0, int y0, int x1, int y1); -NK_LIB int nk_pow(int x, int n); -NK_LIB int nk_ifloord(int x); -NK_LIB int nk_ifloorf(int x); -NK_LIB int nk_iceilf(int x); -NK_LIB int nk_log10(int n); +NK_LIB void nk_unify(struct nk_rect *clip, const struct nk_rect *a, float x0, float y0, float x1, float y1); +NK_LIB double nk_pow(double x, int n); +NK_LIB int nk_ifloord(double x); +NK_LIB int nk_ifloorf(float x); +NK_LIB int nk_iceilf(float x); +NK_LIB int nk_log10(double n); /* util */ enum {NK_DO_NOT_STOP_ON_NEW_LINE, NK_STOP_ON_NEW_LINE}; @@ -5852,12 +5855,12 @@ NK_LIB void nk_memset(void *ptr, int c0, nk_size size); #endif NK_LIB void nk_zero(void *ptr, nk_size size); NK_LIB char *nk_itoa(char *s, long n); -NK_LIB int nk_string_int_limit(char *string, int prec); +NK_LIB int nk_string_float_limit(char *string, int prec); #ifndef NK_DTOA -NK_LIB char *nk_dtoa(char *s, int n); +NK_LIB char *nk_dtoa(char *s, double n); #endif -NK_LIB int nk_text_clamp(const struct nk_user_font *font, const char *text, int text_len, int space, int *glyphs, int *text_width, nk_rune *sep_list, int sep_count); -NK_LIB struct nk_vec2 nk_text_calculate_text_bounds(const struct nk_user_font *font, const char *begin, int byte_len, int row_height, const char **remaining, struct nk_vec2 *out_offset, int *glyphs, int op); +NK_LIB int nk_text_clamp(const struct nk_user_font *font, const char *text, int text_len, float space, int *glyphs, float *text_width, nk_rune *sep_list, int sep_count); +NK_LIB struct nk_vec2 nk_text_calculate_text_bounds(const struct nk_user_font *font, const char *begin, int byte_len, float row_height, const char **remaining, struct nk_vec2 *out_offset, int *glyphs, int op); #ifdef NK_INCLUDE_STANDARD_VARARGS NK_LIB int nk_strfmt(char *buf, int buf_size, const char *fmt, va_list args); #endif @@ -5878,7 +5881,7 @@ NK_LIB void* nk_buffer_realloc(struct nk_buffer *b, nk_size capacity, nk_size *s NK_LIB void nk_command_buffer_init(struct nk_command_buffer *cb, struct nk_buffer *b, enum nk_command_clipping clip); NK_LIB void nk_command_buffer_reset(struct nk_command_buffer *b); NK_LIB void* nk_command_buffer_push(struct nk_command_buffer* b, enum nk_command_type t, nk_size size); -NK_LIB void nk_draw_symbol(struct nk_command_buffer *out, enum nk_symbol_type type, struct nk_rect content, struct nk_color background, struct nk_color foreground, int border_width, const struct nk_user_font *font); +NK_LIB void nk_draw_symbol(struct nk_command_buffer *out, enum nk_symbol_type type, struct nk_rect content, struct nk_color background, struct nk_color foreground, float border_width, const struct nk_user_font *font); /* buffering */ NK_LIB void nk_start_buffer(struct nk_context *ctx, struct nk_command_buffer *b); @@ -5891,9 +5894,9 @@ NK_LIB void nk_build(struct nk_context *ctx); /* text editor */ NK_LIB void nk_textedit_clear_state(struct nk_text_edit *state, enum nk_text_edit_type type, nk_plugin_filter filter); -NK_LIB void nk_textedit_click(struct nk_text_edit *state, int x, int y, const struct nk_user_font *font, int row_height); -NK_LIB void nk_textedit_drag(struct nk_text_edit *state, int x, int y, const struct nk_user_font *font, int row_height); -NK_LIB void nk_textedit_key(struct nk_text_edit *state, enum nk_keys key, int shift_mod, const struct nk_user_font *font, int row_height); +NK_LIB void nk_textedit_click(struct nk_text_edit *state, float x, float y, const struct nk_user_font *font, float row_height); +NK_LIB void nk_textedit_drag(struct nk_text_edit *state, float x, float y, const struct nk_user_font *font, float row_height); +NK_LIB void nk_textedit_key(struct nk_text_edit *state, enum nk_keys key, int shift_mod, const struct nk_user_font *font, float row_height); /* window */ enum nk_window_insert_location { @@ -5930,7 +5933,7 @@ NK_LIB void *nk_create_panel(struct nk_context *ctx); NK_LIB void nk_free_panel(struct nk_context*, struct nk_panel *pan); NK_LIB nk_bool nk_panel_has_header(nk_flags flags, const char *title); NK_LIB struct nk_vec2 nk_panel_get_padding(const struct nk_style *style, enum nk_panel_type type); -NK_LIB int nk_panel_get_border(const struct nk_style *style, nk_flags flags, enum nk_panel_type type); +NK_LIB float nk_panel_get_border(const struct nk_style *style, nk_flags flags, enum nk_panel_type type); NK_LIB struct nk_color nk_panel_get_border_color(const struct nk_style *style, enum nk_panel_type type); NK_LIB nk_bool nk_panel_is_sub(enum nk_panel_type type); NK_LIB nk_bool nk_panel_is_nonblock(enum nk_panel_type type); @@ -5938,9 +5941,9 @@ NK_LIB nk_bool nk_panel_begin(struct nk_context *ctx, const char *title, enum nk NK_LIB void nk_panel_end(struct nk_context *ctx); /* layout */ -NK_LIB int nk_layout_row_calculate_usable_space(const struct nk_style *style, enum nk_panel_type type, int total_space, int columns); -NK_LIB void nk_panel_layout(const struct nk_context *ctx, struct nk_window *win, int height, int cols); -NK_LIB void nk_row_layout(struct nk_context *ctx, enum nk_layout_format fmt, int height, int cols, int width); +NK_LIB float nk_layout_row_calculate_usable_space(const struct nk_style *style, enum nk_panel_type type, float total_space, int columns); +NK_LIB void nk_panel_layout(const struct nk_context *ctx, struct nk_window *win, float height, int cols); +NK_LIB void nk_row_layout(struct nk_context *ctx, enum nk_layout_format fmt, float height, int cols, int width); NK_LIB void nk_panel_alloc_row(const struct nk_context *ctx, struct nk_window *win); NK_LIB void nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, struct nk_window *win, int modify); NK_LIB void nk_panel_alloc_space(struct nk_rect *bounds, const struct nk_context *ctx); @@ -5989,15 +5992,15 @@ NK_LIB void nk_draw_progress(struct nk_command_buffer *out, nk_flags state, cons NK_LIB nk_size nk_do_progress(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, nk_size value, nk_size max, nk_bool modifiable, const struct nk_style_progress *style, struct nk_input *in); /* slider */ -NK_LIB int nk_slider_behavior(nk_flags *state, struct nk_rect *logical_cursor, struct nk_rect *visual_cursor, struct nk_input *in, struct nk_rect bounds, int slider_min, int slider_max, int slider_value, int slider_step, int slider_steps); -NK_LIB void nk_draw_slider(struct nk_command_buffer *out, nk_flags state, const struct nk_style_slider *style, const struct nk_rect *bounds, const struct nk_rect *visual_cursor, int min, int value, int max); -NK_LIB int nk_do_slider(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, int min, int val, int max, int step, const struct nk_style_slider *style, struct nk_input *in, const struct nk_user_font *font); +NK_LIB float nk_slider_behavior(nk_flags *state, struct nk_rect *logical_cursor, struct nk_rect *visual_cursor, struct nk_input *in, struct nk_rect bounds, float slider_min, float slider_max, float slider_value, float slider_step, float slider_steps); +NK_LIB void nk_draw_slider(struct nk_command_buffer *out, nk_flags state, const struct nk_style_slider *style, const struct nk_rect *bounds, const struct nk_rect *visual_cursor, float min, float value, float max); +NK_LIB float nk_do_slider(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, float min, float val, float max, float step, const struct nk_style_slider *style, struct nk_input *in, const struct nk_user_font *font); /* scrollbar */ -NK_LIB int nk_scrollbar_behavior(nk_flags *state, struct nk_input *in, int has_scrolling, const struct nk_rect *scroll, const struct nk_rect *cursor, const struct nk_rect *empty0, const struct nk_rect *empty1, int scroll_offset, int target, int scroll_step, enum nk_orientation o); +NK_LIB float nk_scrollbar_behavior(nk_flags *state, struct nk_input *in, int has_scrolling, const struct nk_rect *scroll, const struct nk_rect *cursor, const struct nk_rect *empty0, const struct nk_rect *empty1, float scroll_offset, float target, float scroll_step, enum nk_orientation o); NK_LIB void nk_draw_scrollbar(struct nk_command_buffer *out, nk_flags state, const struct nk_style_scrollbar *style, const struct nk_rect *bounds, const struct nk_rect *scroll); -NK_LIB int nk_do_scrollbarv(nk_flags *state, struct nk_command_buffer *out, struct nk_rect scroll, int has_scrolling, int offset, int target, int step, int button_pixel_inc, const struct nk_style_scrollbar *style, struct nk_input *in, const struct nk_user_font *font); -NK_LIB int nk_do_scrollbarh(nk_flags *state, struct nk_command_buffer *out, struct nk_rect scroll, int has_scrolling, int offset, int target, int step, int button_pixel_inc, const struct nk_style_scrollbar *style, struct nk_input *in, const struct nk_user_font *font); +NK_LIB float nk_do_scrollbarv(nk_flags *state, struct nk_command_buffer *out, struct nk_rect scroll, int has_scrolling, float offset, float target, float step, float button_pixel_inc, const struct nk_style_scrollbar *style, struct nk_input *in, const struct nk_user_font *font); +NK_LIB float nk_do_scrollbarh(nk_flags *state, struct nk_command_buffer *out, struct nk_rect scroll, int has_scrolling, float offset, float target, float step, float button_pixel_inc, const struct nk_style_scrollbar *style, struct nk_input *in, const struct nk_user_font *font); /* selectable */ NK_LIB void nk_draw_selectable(struct nk_command_buffer *out, nk_flags state, const struct nk_style_selectable *style, nk_bool active, const struct nk_rect *bounds, const struct nk_rect *icon, const struct nk_image *img, enum nk_symbol_type sym, const char *string, int len, nk_flags align, const struct nk_user_font *font); @@ -6005,7 +6008,7 @@ NK_LIB nk_bool nk_do_selectable(nk_flags *state, struct nk_command_buffer *out, NK_LIB nk_bool nk_do_selectable_image(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, const char *str, int len, nk_flags align, nk_bool *value, const struct nk_image *img, const struct nk_style_selectable *style, const struct nk_input *in, const struct nk_user_font *font); /* edit */ -NK_LIB void nk_edit_draw_text(struct nk_command_buffer *out, const struct nk_style_edit *style, int pos_x, int pos_y, int x_offset, const char *text, int byte_len, int row_height, const struct nk_user_font *font, struct nk_color background, struct nk_color foreground, nk_bool is_selected); +NK_LIB void nk_edit_draw_text(struct nk_command_buffer *out, const struct nk_style_edit *style, float pos_x, float pos_y, float x_offset, const char *text, int byte_len, float row_height, const struct nk_user_font *font, struct nk_color background, struct nk_color foreground, nk_bool is_selected); NK_LIB nk_flags nk_do_edit(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, nk_flags flags, nk_plugin_filter filter, struct nk_text_edit *edit, const struct nk_style_edit *style, struct nk_input *in, const struct nk_user_font *font); /* color-picker */ @@ -6021,15 +6024,17 @@ enum nk_property_status { }; enum nk_property_filter { NK_FILTER_INT, - NK_FILTER_int + NK_FILTER_FLOAT }; enum nk_property_kind { - NK_PROPERTY_INT + NK_PROPERTY_INT, + NK_PROPERTY_FLOAT, + NK_PROPERTY_DOUBLE }; union nk_property { int i; - int f; - int d; + float f; + double d; }; struct nk_property_variant { enum nk_property_kind kind; @@ -6039,13 +6044,14 @@ struct nk_property_variant { union nk_property step; }; NK_LIB struct nk_property_variant nk_property_variant_int(int value, int min_value, int max_value, int step); -NK_LIB struct nk_property_variant nk_property_variant_int(int value, int min_value, int max_value, int step); +NK_LIB struct nk_property_variant nk_property_variant_float(float value, float min_value, float max_value, float step); +NK_LIB struct nk_property_variant nk_property_variant_double(double value, double min_value, double max_value, double step); -NK_LIB void nk_drag_behavior(nk_flags *state, const struct nk_input *in, struct nk_rect drag, struct nk_property_variant *variant, int inc_per_pixel); -NK_LIB void nk_property_behavior(nk_flags *ws, const struct nk_input *in, struct nk_rect property, struct nk_rect label, struct nk_rect edit, struct nk_rect empty, int *state, struct nk_property_variant *variant, int inc_per_pixel); +NK_LIB void nk_drag_behavior(nk_flags *state, const struct nk_input *in, struct nk_rect drag, struct nk_property_variant *variant, float inc_per_pixel); +NK_LIB void nk_property_behavior(nk_flags *ws, const struct nk_input *in, struct nk_rect property, struct nk_rect label, struct nk_rect edit, struct nk_rect empty, int *state, struct nk_property_variant *variant, float inc_per_pixel); NK_LIB void nk_draw_property(struct nk_command_buffer *out, const struct nk_style_property *style, const struct nk_rect *bounds, const struct nk_rect *label, nk_flags state, const char *name, int len, const struct nk_user_font *font); -NK_LIB void nk_do_property(nk_flags *ws, struct nk_command_buffer *out, struct nk_rect property, const char *name, struct nk_property_variant *variant, int inc_per_pixel, char *buffer, int *len, int *state, int *cursor, int *select_begin, int *select_end, const struct nk_style_property *style, enum nk_property_filter filter, struct nk_input *in, const struct nk_user_font *font, struct nk_text_edit *text_edit, enum nk_button_behavior behavior); -NK_LIB void nk_property(struct nk_context *ctx, const char *name, struct nk_property_variant *variant, int inc_per_pixel, const enum nk_property_filter filter); +NK_LIB void nk_do_property(nk_flags *ws, struct nk_command_buffer *out, struct nk_rect property, const char *name, struct nk_property_variant *variant, float inc_per_pixel, char *buffer, int *len, int *state, int *cursor, int *select_begin, int *select_end, const struct nk_style_property *style, enum nk_property_filter filter, struct nk_input *in, const struct nk_user_font *font, struct nk_text_edit *text_edit, enum nk_button_behavior behavior); +NK_LIB void nk_property(struct nk_context *ctx, const char *name, struct nk_property_variant *variant, float inc_per_pixel, const enum nk_property_filter filter); #ifdef NK_INCLUDE_FONT_BAKING @@ -6084,7 +6090,7 @@ nk_stbtt_free(void *ptr, void *user_data) { * MATH * * ===============================================================*/ -/* Since nuklear is supposed to work on all systems providing inting point +/* Since nuklear is supposed to work on all systems providing floating point math without any dependencies I also had to implement my own math functions for sqrt, sin and cos. Since the actual highly accurate implementations for the standard library functions are quite complex and I do not need high @@ -6096,7 +6102,7 @@ nk_stbtt_free(void *ptr, void *user_data) { https://en.wikipedia.org/wiki/Fast_inverse_square_root with slightly tweaked magic constant. While on today's hardware it is probably not faster it is still fast and accurate enough for - nuklear's use cases. IMPORTANT: this requires int format IEEE 754 + nuklear's use cases. IMPORTANT: this requires float format IEEE 754 Sine/Cosine ----------- @@ -6111,50 +6117,50 @@ nk_stbtt_free(void *ptr, void *user_data) { (it can actually approximate a lot more functions) can be found here: www.lolengine.net/wiki/oss/lolremez */ -NK_LIB int -nk_inv_sqrt(int n) +NK_LIB float +nk_inv_sqrt(float n) { - int x2; - const int threehalfs = 1; - union {nk_uint i; int f;} conv = {0}; + float x2; + const float threehalfs = 1.5f; + union {nk_uint i; float f;} conv = {0}; conv.f = n; - x2 = n * 0; + x2 = n * 0.5f; conv.i = 0x5f375A84 - (conv.i >> 1); conv.f = conv.f * (threehalfs - (x2 * conv.f * conv.f)); return conv.f; } #ifndef NK_SIN #define NK_SIN nk_sin -NK_LIB int -nk_sin(int x) +NK_LIB float +nk_sin(float x) { - NK_STORAGE const int a0 = +1.91059300966915117e-31f; - NK_STORAGE const int a1 = +1.00086760103908896f; - NK_STORAGE const int a2 = -1.21276126894734565e-2f; - NK_STORAGE const int a3 = -1.38078780785773762e-1f; - NK_STORAGE const int a4 = -2.67353392911981221e-2f; - NK_STORAGE const int a5 = +2.08026600266304389e-2f; - NK_STORAGE const int a6 = -3.03996055049204407e-3f; - NK_STORAGE const int a7 = +1.38235642404333740e-4f; + NK_STORAGE const float a0 = +1.91059300966915117e-31f; + NK_STORAGE const float a1 = +1.00086760103908896f; + NK_STORAGE const float a2 = -1.21276126894734565e-2f; + NK_STORAGE const float a3 = -1.38078780785773762e-1f; + NK_STORAGE const float a4 = -2.67353392911981221e-2f; + NK_STORAGE const float a5 = +2.08026600266304389e-2f; + NK_STORAGE const float a6 = -3.03996055049204407e-3f; + NK_STORAGE const float a7 = +1.38235642404333740e-4f; return a0 + x*(a1 + x*(a2 + x*(a3 + x*(a4 + x*(a5 + x*(a6 + x*a7)))))); } #endif #ifndef NK_COS #define NK_COS nk_cos -NK_LIB int -nk_cos(int x) +NK_LIB float +nk_cos(float x) { /* New implementation. Also generated using lolremez. */ /* Old version significantly deviated from expected results. */ - NK_STORAGE const int a0 = 9.9995999154986614e-1f; - NK_STORAGE const int a1 = 1.2548995793001028e-3f; - NK_STORAGE const int a2 = -5.0648546280678015e-1f; - NK_STORAGE const int a3 = 1.2942246466519995e-2f; - NK_STORAGE const int a4 = 2.8668384702547972e-2f; - NK_STORAGE const int a5 = 7.3726485210586547e-3f; - NK_STORAGE const int a6 = -3.8510875386947414e-3f; - NK_STORAGE const int a7 = 4.7196604604366623e-4f; - NK_STORAGE const int a8 = -1.8776444013090451e-5f; + NK_STORAGE const float a0 = 9.9995999154986614e-1f; + NK_STORAGE const float a1 = 1.2548995793001028e-3f; + NK_STORAGE const float a2 = -5.0648546280678015e-1f; + NK_STORAGE const float a3 = 1.2942246466519995e-2f; + NK_STORAGE const float a4 = 2.8668384702547972e-2f; + NK_STORAGE const float a5 = 7.3726485210586547e-3f; + NK_STORAGE const float a6 = -3.8510875386947414e-3f; + NK_STORAGE const float a7 = 4.7196604604366623e-4f; + NK_STORAGE const float a8 = -1.8776444013090451e-5f; return a0 + x*(a1 + x*(a2 + x*(a3 + x*(a4 + x*(a5 + x*(a6 + x*(a7 + x*a8))))))); } #endif @@ -6170,11 +6176,11 @@ nk_round_up_pow2(nk_uint v) v++; return v; } -NK_LIB int -nk_pow(int x, int n) +NK_LIB double +nk_pow(double x, int n) { /* check the sign of n */ - int r = 1; + double r = 1; int plus = n >= 0; n = (plus) ? n : -n; while (n > 0) { @@ -6186,31 +6192,31 @@ nk_pow(int x, int n) return plus ? r : 1.0 / r; } NK_LIB int -nk_ifloord(int x) +nk_ifloord(double x) { - x = (int)((int)x - ((x < 0.0) ? 1 : 0)); + x = (double)((int)x - ((x < 0.0) ? 1 : 0)); return (int)x; } NK_LIB int -nk_ifloorf(int x) +nk_ifloorf(float x) { - x = (int)((int)x - ((x < 0) ? 1 : 0)); + x = (float)((int)x - ((x < 0.0f) ? 1 : 0)); return (int)x; } NK_LIB int -nk_iceilf(int x) +nk_iceilf(float x) { if (x >= 0) { int i = (int)x; return (x > i) ? i+1: i; } else { int t = (int)x; - int r = x - (int)t; - return (r > 0) ? t+1: t; + float r = x - (float)t; + return (r > 0.0f) ? t+1: t; } } NK_LIB int -nk_log10(int n) +nk_log10(double n) { int neg; int ret; @@ -6231,7 +6237,7 @@ nk_get_null_rect(void) return nk_null_rect; } NK_API struct nk_rect -nk_rect(int x, int y, int w, int h) +nk_rect(float x, float y, float w, float h) { struct nk_rect r; r.x = x; r.y = y; @@ -6242,10 +6248,10 @@ NK_API struct nk_rect nk_recti(int x, int y, int w, int h) { struct nk_rect r; - r.x = (int)x; - r.y = (int)y; - r.w = (int)w; - r.h = (int)h; + r.x = (float)x; + r.y = (float)y; + r.w = (float)w; + r.h = (float)h; return r; } NK_API struct nk_rect @@ -6254,7 +6260,7 @@ nk_recta(struct nk_vec2 pos, struct nk_vec2 size) return nk_rect(pos.x, pos.y, size.x, size.y); } NK_API struct nk_rect -nk_rectv(const int *r) +nk_rectv(const float *r) { return nk_rect(r[0], r[1], r[2], r[3]); } @@ -6278,7 +6284,7 @@ nk_rect_size(struct nk_rect r) return ret; } NK_LIB struct nk_rect -nk_shrink_rect(struct nk_rect r, int amount) +nk_shrink_rect(struct nk_rect r, float amount) { struct nk_rect res; r.w = NK_MAX(r.w, 2 * amount); @@ -6300,7 +6306,7 @@ nk_pad_rect(struct nk_rect r, struct nk_vec2 pad) return r; } NK_API struct nk_vec2 -nk_vec2(int x, int y) +nk_vec2(float x, float y) { struct nk_vec2 ret; ret.x = x; ret.y = y; @@ -6310,12 +6316,12 @@ NK_API struct nk_vec2 nk_vec2i(int x, int y) { struct nk_vec2 ret; - ret.x = (int)x; - ret.y = (int)y; + ret.x = (float)x; + ret.y = (float)y; return ret; } NK_API struct nk_vec2 -nk_vec2v(const int *v) +nk_vec2v(const float *v) { return nk_vec2(v[0], v[1]); } @@ -6325,8 +6331,8 @@ nk_vec2iv(const int *v) return nk_vec2i(v[0], v[1]); } NK_LIB void -nk_unify(struct nk_rect *clip, const struct nk_rect *a, int x0, int y0, - int x1, int y1) +nk_unify(struct nk_rect *clip, const struct nk_rect *a, float x0, float y0, + float x1, float y1) { NK_ASSERT(a); NK_ASSERT(clip); @@ -6340,9 +6346,9 @@ nk_unify(struct nk_rect *clip, const struct nk_rect *a, int x0, int y0, NK_API void nk_triangle_from_direction(struct nk_vec2 *result, struct nk_rect r, - int pad_x, int pad_y, enum nk_heading direction) + float pad_x, float pad_y, enum nk_heading direction) { - int w_half, h_half; + float w_half, h_half; NK_ASSERT(result); r.w = NK_MAX(2 * pad_x, r.w); @@ -6353,8 +6359,8 @@ nk_triangle_from_direction(struct nk_vec2 *result, struct nk_rect r, r.x = r.x + pad_x; r.y = r.y + pad_y; - w_half = r.w / 2; - h_half = r.h / 2; + w_half = r.w / 2.0f; + h_half = r.h / 2.0f; if (direction == NK_UP) { result[0] = nk_vec2(r.x + w_half, r.y); @@ -6542,14 +6548,14 @@ nk_strtoi(const char *str, const char **endptr) *endptr = p; return neg*value; } -NK_API int +NK_API double nk_strtod(const char *str, const char **endptr) { - int m; - int neg = 1.0; + double m; + double neg = 1.0; const char *p = str; - int value = 0; - int number = 0; + double value = 0; + double number = 0; NK_ASSERT(str); if (!str) return 0; @@ -6562,14 +6568,14 @@ nk_strtod(const char *str, const char **endptr) } while (*p && *p != '.' && *p != 'e') { - value = value * 10.0 + (int) (*p - '0'); + value = value * 10.0 + (double) (*p - '0'); p++; } if (*p == '.') { p++; for(m = 0.1; *p && *p != 'e'; p++ ) { - value = value + (int) (*p - '0') * m; + value = value + (double) (*p - '0') * m; m *= 0.1; } } @@ -6599,12 +6605,14 @@ nk_strtod(const char *str, const char **endptr) *endptr = p; return number; } -NK_API int +NK_API float nk_strtof(const char *str, const char **endptr) { - int int_value; - int_value = NK_STRTOD(str, endptr); - return int_value; + float float_value; + double double_value; + double_value = NK_STRTOD(str, endptr); + float_value = (float)double_value; + return float_value; } NK_API int nk_stricmp(const char *s1, const char *s2) @@ -6819,7 +6827,7 @@ nk_strmatch_fuzzy_string(char const *str, char const *pattern, int *out_score) return nk_strmatch_fuzzy_text(str, nk_strlen(str), pattern, out_score); } NK_LIB int -nk_string_int_limit(char *string, int prec) +nk_string_float_limit(char *string, int prec) { int dot = 0; char *c = string; @@ -6878,7 +6886,7 @@ nk_itoa(char *s, long n) #ifndef NK_DTOA #define NK_DTOA nk_dtoa NK_LIB char* -nk_dtoa(char *s, int n) +nk_dtoa(char *s, double n) { int useExp = 0; int digit = 0, m = 0, m1 = 0; @@ -6905,7 +6913,7 @@ nk_dtoa(char *s, int n) if (useExp) { if (m < 0) m -= 1; - n = n / (int)nk_pow(10.0, m); + n = n / (double)nk_pow(10.0, m); m1 = m; m = 0; } @@ -6914,12 +6922,12 @@ nk_dtoa(char *s, int n) } /* convert the number */ - while (n > NK_int_PRECISION || m >= 0) { - int weight = nk_pow(10.0, m); + while (n > NK_FLOAT_PRECISION || m >= 0) { + double weight = nk_pow(10.0, m); if (weight > 0) { - int t = (int)n / weight; + double t = (double)n / weight; digit = nk_ifloord(t); - n -= ((int)digit * weight); + n -= ((double)digit * weight); *(c++) = (char)('0' + (char)digit); } if (m == 0 && n > 0) @@ -7204,11 +7212,11 @@ nk_vsnprintf(char *buf, int buf_size, const char *fmt, va_list args) buf[len++] = ' '; } } else if (*iter == 'f') { - /* inting point */ + /* floating point */ const char *num_iter; int cur_precision = (precision < 0) ? 6: precision; int prefix, cur_width = NK_MAX(width, 0); - int value = va_arg(args, int); + double value = va_arg(args, double); int num_len = 0, frac_len = 0, dot = 0; int padding = 0; @@ -7395,21 +7403,21 @@ nk_file_load(const char* path, nk_size* siz, struct nk_allocator *alloc) #endif NK_LIB int nk_text_clamp(const struct nk_user_font *font, const char *text, - int text_len, int space, int *glyphs, int *text_width, + int text_len, float space, int *glyphs, float *text_width, nk_rune *sep_list, int sep_count) { int i = 0; int glyph_len = 0; - int last_width = 0; + float last_width = 0; nk_rune unicode = 0; - int width = 0; + float width = 0; int len = 0; int g = 0; - int s; + float s; int sep_len = 0; int sep_g = 0; - int sep_width = 0; + float sep_width = 0; sep_count = NK_MAX(sep_count,0); glyph_len = nk_utf_decode(text, &unicode, text_len); @@ -7443,14 +7451,14 @@ nk_text_clamp(const struct nk_user_font *font, const char *text, } NK_LIB struct nk_vec2 nk_text_calculate_text_bounds(const struct nk_user_font *font, - const char *begin, int byte_len, int row_height, const char **remaining, + const char *begin, int byte_len, float row_height, const char **remaining, struct nk_vec2 *out_offset, int *glyphs, int op) { - int line_height = row_height; + float line_height = row_height; struct nk_vec2 text_size = nk_vec2(0,0); - int line_width = 0; + float line_width = 0.0f; - int glyph_width; + float glyph_width; int glyph_len = 0; nk_rune unicode = 0; int text_len = 0; @@ -7485,7 +7493,7 @@ nk_text_calculate_text_bounds(const struct nk_user_font *font, *glyphs = *glyphs + 1; text_len += glyph_len; - line_width += (int)glyph_width; + line_width += (float)glyph_width; glyph_len = nk_utf_decode(begin + text_len, &unicode, byte_len-text_len); glyph_width = font->width(font->userdata, font->height, begin+text_len, glyph_len); continue; @@ -7495,7 +7503,7 @@ nk_text_calculate_text_bounds(const struct nk_user_font *font, text_size.x = line_width; if (out_offset) *out_offset = nk_vec2(line_width, text_size.y + line_height); - if (line_width > 0 || text_size.y == 0) + if (line_width > 0 || text_size.y == 0.0f) text_size.y += line_height; if (remaining) *remaining = begin+text_len; @@ -7630,17 +7638,17 @@ nk_rgba_u32(nk_uint in) return ret; } NK_API struct nk_color -nk_rgba_f(int r, int g, int b, int a) +nk_rgba_f(float r, float g, float b, float a) { struct nk_color ret; - ret.r = (nk_byte)(NK_SATURATE(r) * 255); - ret.g = (nk_byte)(NK_SATURATE(g) * 255); - ret.b = (nk_byte)(NK_SATURATE(b) * 255); - ret.a = (nk_byte)(NK_SATURATE(a) * 255); + ret.r = (nk_byte)(NK_SATURATE(r) * 255.0f); + ret.g = (nk_byte)(NK_SATURATE(g) * 255.0f); + ret.b = (nk_byte)(NK_SATURATE(b) * 255.0f); + ret.a = (nk_byte)(NK_SATURATE(a) * 255.0f); return ret; } NK_API struct nk_color -nk_rgba_fv(const int *c) +nk_rgba_fv(const float *c) { return nk_rgba_f(c[0], c[1], c[2], c[3]); } @@ -7650,17 +7658,17 @@ nk_rgba_cf(struct nk_colorf c) return nk_rgba_f(c.r, c.g, c.b, c.a); } NK_API struct nk_color -nk_rgb_f(int r, int g, int b) +nk_rgb_f(float r, float g, float b) { struct nk_color ret; - ret.r = (nk_byte)(NK_SATURATE(r) * 255); - ret.g = (nk_byte)(NK_SATURATE(g) * 255); - ret.b = (nk_byte)(NK_SATURATE(b) * 255); + ret.r = (nk_byte)(NK_SATURATE(r) * 255.0f); + ret.g = (nk_byte)(NK_SATURATE(g) * 255.0f); + ret.b = (nk_byte)(NK_SATURATE(b) * 255.0f); ret.a = 255; return ret; } NK_API struct nk_color -nk_rgb_fv(const int *c) +nk_rgb_fv(const float *c) { return nk_rgb_f(c[0], c[1], c[2]); } @@ -7685,22 +7693,22 @@ nk_hsv_bv(const nk_byte *c) return nk_hsv(c[0], c[1], c[2]); } NK_API struct nk_color -nk_hsv_f(int h, int s, int v) +nk_hsv_f(float h, float s, float v) { - return nk_hsva_f(h, s, v, 1); + return nk_hsva_f(h, s, v, 1.0f); } NK_API struct nk_color -nk_hsv_fv(const int *c) +nk_hsv_fv(const float *c) { return nk_hsv_f(c[0], c[1], c[2]); } NK_API struct nk_color nk_hsva(int h, int s, int v, int a) { - int hf = ((int)NK_CLAMP(0, h, 255)) / 255; - int sf = ((int)NK_CLAMP(0, s, 255)) / 255; - int vf = ((int)NK_CLAMP(0, v, 255)) / 255; - int af = ((int)NK_CLAMP(0, a, 255)) / 255; + float hf = ((float)NK_CLAMP(0, h, 255)) / 255.0f; + float sf = ((float)NK_CLAMP(0, s, 255)) / 255.0f; + float vf = ((float)NK_CLAMP(0, v, 255)) / 255.0f; + float af = ((float)NK_CLAMP(0, a, 255)) / 255.0f; return nk_hsva_f(hf, sf, vf, af); } NK_API struct nk_color @@ -7714,20 +7722,21 @@ nk_hsva_bv(const nk_byte *c) return nk_hsva(c[0], c[1], c[2], c[3]); } NK_API struct nk_colorf -nk_hsva_colorf(int h, int s, int v, int a) +nk_hsva_colorf(float h, float s, float v, float a) { int i; - int p, q, t, f; + float p, q, t, f; struct nk_colorf out = {0,0,0,0}; - if (s <= 0) { + if (s <= 0.0f) { out.r = v; out.g = v; out.b = v; out.a = a; return out; } + h = h / (60.0f/360.0f); i = (int)h; - f = h - (int)i; - p = v * (1 - s); - q = v * (1 - (s * f)); - t = v * (1 - s * (1 - f)); + f = h - (float)i; + p = v * (1.0f - s); + q = v * (1.0f - (s * f)); + t = v * (1.0f - s * (1.0f - f)); switch (i) { case 0: default: out.r = v; out.g = t; out.b = p; break; @@ -7740,18 +7749,18 @@ nk_hsva_colorf(int h, int s, int v, int a) return out; } NK_API struct nk_colorf -nk_hsva_colorfv(int *c) +nk_hsva_colorfv(float *c) { return nk_hsva_colorf(c[0], c[1], c[2], c[3]); } NK_API struct nk_color -nk_hsva_f(int h, int s, int v, int a) +nk_hsva_f(float h, float s, float v, float a) { struct nk_colorf c = nk_hsva_colorf(h, s, v, a); return nk_rgba_f(c.r, c.g, c.b, c.a); } NK_API struct nk_color -nk_hsva_fv(const int *c) +nk_hsva_fv(const float *c) { return nk_hsva_f(c[0], c[1], c[2], c[3]); } @@ -7765,16 +7774,16 @@ nk_color_u32(struct nk_color in) return out; } NK_API void -nk_color_f(int *r, int *g, int *b, int *a, struct nk_color in) +nk_color_f(float *r, float *g, float *b, float *a, struct nk_color in) { - NK_STORAGE const int s = 1/255; - *r = (int)in.r * s; - *g = (int)in.g * s; - *b = (int)in.b * s; - *a = (int)in.a * s; + NK_STORAGE const float s = 1.0f/255.0f; + *r = (float)in.r * s; + *g = (float)in.g * s; + *b = (float)in.b * s; + *a = (float)in.a * s; } NK_API void -nk_color_fv(int *c, struct nk_color in) +nk_color_fv(float *c, struct nk_color in) { nk_color_f(&c[0], &c[1], &c[2], &c[3], in); } @@ -7786,67 +7795,67 @@ nk_color_cf(struct nk_color in) return o; } NK_API void -nk_color_d(int *r, int *g, int *b, int *a, struct nk_color in) +nk_color_d(double *r, double *g, double *b, double *a, struct nk_color in) { - NK_STORAGE const int s = 1.0/255.0; - *r = (int)in.r * s; - *g = (int)in.g * s; - *b = (int)in.b * s; - *a = (int)in.a * s; + NK_STORAGE const double s = 1.0/255.0; + *r = (double)in.r * s; + *g = (double)in.g * s; + *b = (double)in.b * s; + *a = (double)in.a * s; } NK_API void -nk_color_dv(int *c, struct nk_color in) +nk_color_dv(double *c, struct nk_color in) { nk_color_d(&c[0], &c[1], &c[2], &c[3], in); } NK_API void -nk_color_hsv_f(int *out_h, int *out_s, int *out_v, struct nk_color in) +nk_color_hsv_f(float *out_h, float *out_s, float *out_v, struct nk_color in) { - int a; + float a; nk_color_hsva_f(out_h, out_s, out_v, &a, in); } NK_API void -nk_color_hsv_fv(int *out, struct nk_color in) +nk_color_hsv_fv(float *out, struct nk_color in) { - int a; + float a; nk_color_hsva_f(&out[0], &out[1], &out[2], &a, in); } NK_API void -nk_colorf_hsva_f(int *out_h, int *out_s, - int *out_v, int *out_a, struct nk_colorf in) +nk_colorf_hsva_f(float *out_h, float *out_s, + float *out_v, float *out_a, struct nk_colorf in) { - int chroma; - int K = 0; + float chroma; + float K = 0.0f; if (in.g < in.b) { - const int t = in.g; in.g = in.b; in.b = t; + const float t = in.g; in.g = in.b; in.b = t; K = -1.f; } if (in.r < in.g) { - const int t = in.r; in.r = in.g; in.g = t; - K = -2.f/6 - K; + const float t = in.r; in.r = in.g; in.g = t; + K = -2.f/6.0f - K; } chroma = in.r - ((in.g < in.b) ? in.g: in.b); - *out_h = NK_ABS(K + (in.g - in.b)/(6 * chroma + 1e-20f)); + *out_h = NK_ABS(K + (in.g - in.b)/(6.0f * chroma + 1e-20f)); *out_s = chroma / (in.r + 1e-20f); *out_v = in.r; *out_a = in.a; } NK_API void -nk_colorf_hsva_fv(int *hsva, struct nk_colorf in) +nk_colorf_hsva_fv(float *hsva, struct nk_colorf in) { nk_colorf_hsva_f(&hsva[0], &hsva[1], &hsva[2], &hsva[3], in); } NK_API void -nk_color_hsva_f(int *out_h, int *out_s, - int *out_v, int *out_a, struct nk_color in) +nk_color_hsva_f(float *out_h, float *out_s, + float *out_v, float *out_a, struct nk_color in) { struct nk_colorf col; nk_color_f(&col.r,&col.g,&col.b,&col.a, in); nk_colorf_hsva_f(out_h, out_s, out_v, out_a, col); } NK_API void -nk_color_hsva_fv(int *out, struct nk_color in) +nk_color_hsva_fv(float *out, struct nk_color in) { nk_color_hsva_f(&out[0], &out[1], &out[2], &out[3], in); } @@ -7854,12 +7863,12 @@ NK_API void nk_color_hsva_i(int *out_h, int *out_s, int *out_v, int *out_a, struct nk_color in) { - int h,s,v,a; + float h,s,v,a; nk_color_hsva_f(&h, &s, &v, &a, in); - *out_h = (nk_byte)(h * 255); - *out_s = (nk_byte)(s * 255); - *out_v = (nk_byte)(v * 255); - *out_a = (nk_byte)(a * 255); + *out_h = (nk_byte)(h * 255.0f); + *out_s = (nk_byte)(s * 255.0f); + *out_v = (nk_byte)(v * 255.0f); + *out_a = (nk_byte)(a * 255.0f); } NK_API void nk_color_hsva_iv(int *out, struct nk_color in) @@ -8109,7 +8118,7 @@ nk_buffer_init(struct nk_buffer *b, const struct nk_allocator *a, b->memory.ptr = a->alloc(a->userdata,0, initial_size); b->memory.size = initial_size; b->size = initial_size; - b->grow_factor = 2; + b->grow_factor = 2.0f; b->pool = *a; } NK_API void @@ -8228,7 +8237,7 @@ nk_buffer_alloc(struct nk_buffer *b, enum nk_buffer_allocation_type type, return 0; /* buffer is full so allocate bigger buffer if dynamic */ - capacity = (nk_size)((int)b->memory.size * b->grow_factor); + capacity = (nk_size)((float)b->memory.size * b->grow_factor); capacity = NK_MAX(capacity, nk_round_up_pow2((nk_uint)(b->allocated + size))); b->memory.ptr = nk_buffer_realloc(b, capacity, &b->memory.size); if (!b->memory.ptr) return 0; @@ -8880,8 +8889,8 @@ nk_push_scissor(struct nk_command_buffer *b, struct nk_rect r) cmd->h = (unsigned short)NK_MAX(0, r.h); } NK_API void -nk_stroke_line(struct nk_command_buffer *b, int x0, int y0, - int x1, int y1, int line_thickness, struct nk_color c) +nk_stroke_line(struct nk_command_buffer *b, float x0, float y0, + float x1, float y1, float line_thickness, struct nk_color c) { struct nk_command_line *cmd; NK_ASSERT(b); @@ -8897,9 +8906,9 @@ nk_stroke_line(struct nk_command_buffer *b, int x0, int y0, cmd->color = c; } NK_API void -nk_stroke_curve(struct nk_command_buffer *b, int ax, int ay, - int ctrl0x, int ctrl0y, int ctrl1x, int ctrl1y, - int bx, int by, int line_thickness, struct nk_color col) +nk_stroke_curve(struct nk_command_buffer *b, float ax, float ay, + float ctrl0x, float ctrl0y, float ctrl1x, float ctrl1y, + float bx, float by, float line_thickness, struct nk_color col) { struct nk_command_curve *cmd; NK_ASSERT(b); @@ -8921,7 +8930,7 @@ nk_stroke_curve(struct nk_command_buffer *b, int ax, int ay, } NK_API void nk_stroke_rect(struct nk_command_buffer *b, struct nk_rect rect, - int rounding, int line_thickness, struct nk_color c) + float rounding, float line_thickness, struct nk_color c) { struct nk_command_rect *cmd; NK_ASSERT(b); @@ -8944,7 +8953,7 @@ nk_stroke_rect(struct nk_command_buffer *b, struct nk_rect rect, } NK_API void nk_fill_rect(struct nk_command_buffer *b, struct nk_rect rect, - int rounding, struct nk_color c) + float rounding, struct nk_color c) { struct nk_command_rect_filled *cmd; NK_ASSERT(b); @@ -8993,7 +9002,7 @@ nk_fill_rect_multi_color(struct nk_command_buffer *b, struct nk_rect rect, } NK_API void nk_stroke_circle(struct nk_command_buffer *b, struct nk_rect r, - int line_thickness, struct nk_color c) + float line_thickness, struct nk_color c) { struct nk_command_circle *cmd; if (!b || r.w == 0 || r.h == 0 || line_thickness <= 0) return; @@ -9035,8 +9044,8 @@ nk_fill_circle(struct nk_command_buffer *b, struct nk_rect r, struct nk_color c) cmd->color = c; } NK_API void -nk_stroke_arc(struct nk_command_buffer *b, int cx, int cy, int radius, - int a_min, int a_max, int line_thickness, struct nk_color c) +nk_stroke_arc(struct nk_command_buffer *b, float cx, float cy, float radius, + float a_min, float a_max, float line_thickness, struct nk_color c) { struct nk_command_arc *cmd; if (!b || c.a == 0 || line_thickness <= 0) return; @@ -9052,8 +9061,8 @@ nk_stroke_arc(struct nk_command_buffer *b, int cx, int cy, int radius, cmd->color = c; } NK_API void -nk_fill_arc(struct nk_command_buffer *b, int cx, int cy, int radius, - int a_min, int a_max, struct nk_color c) +nk_fill_arc(struct nk_command_buffer *b, float cx, float cy, float radius, + float a_min, float a_max, struct nk_color c) { struct nk_command_arc_filled *cmd; NK_ASSERT(b); @@ -9069,8 +9078,8 @@ nk_fill_arc(struct nk_command_buffer *b, int cx, int cy, int radius, cmd->color = c; } NK_API void -nk_stroke_triangle(struct nk_command_buffer *b, int x0, int y0, int x1, - int y1, int x2, int y2, int line_thickness, struct nk_color c) +nk_stroke_triangle(struct nk_command_buffer *b, float x0, float y0, float x1, + float y1, float x2, float y2, float line_thickness, struct nk_color c) { struct nk_command_triangle *cmd; NK_ASSERT(b); @@ -9096,8 +9105,8 @@ nk_stroke_triangle(struct nk_command_buffer *b, int x0, int y0, int x1, cmd->color = c; } NK_API void -nk_fill_triangle(struct nk_command_buffer *b, int x0, int y0, int x1, - int y1, int x2, int y2, struct nk_color c) +nk_fill_triangle(struct nk_command_buffer *b, float x0, float y0, float x1, + float y1, float x2, float y2, struct nk_color c) { struct nk_command_triangle_filled *cmd; NK_ASSERT(b); @@ -9123,8 +9132,8 @@ nk_fill_triangle(struct nk_command_buffer *b, int x0, int y0, int x1, cmd->color = c; } NK_API void -nk_stroke_polygon(struct nk_command_buffer *b, int *points, int point_count, - int line_thickness, struct nk_color col) +nk_stroke_polygon(struct nk_command_buffer *b, float *points, int point_count, + float line_thickness, struct nk_color col) { int i; nk_size size = 0; @@ -9144,7 +9153,7 @@ nk_stroke_polygon(struct nk_command_buffer *b, int *points, int point_count, } } NK_API void -nk_fill_polygon(struct nk_command_buffer *b, int *points, int point_count, +nk_fill_polygon(struct nk_command_buffer *b, float *points, int point_count, struct nk_color col) { int i; @@ -9165,8 +9174,8 @@ nk_fill_polygon(struct nk_command_buffer *b, int *points, int point_count, } } NK_API void -nk_stroke_polyline(struct nk_command_buffer *b, int *points, int point_count, - int line_thickness, struct nk_color col) +nk_stroke_polyline(struct nk_command_buffer *b, float *points, int point_count, + float line_thickness, struct nk_color col) { int i; nk_size size = 0; @@ -9230,7 +9239,7 @@ nk_draw_nine_slice(struct nk_command_buffer *b, struct nk_rect r, img.region[3] = slc->t; nk_draw_image(b, - nk_rect(r.x, r.y, (int)slc->l, (int)slc->t), + nk_rect(r.x, r.y, (float)slc->l, (float)slc->t), &img, col); #define IMG_RGN(x, y, w, h) img.region[0] = (nk_ushort)(x); img.region[1] = (nk_ushort)(y); img.region[2] = (nk_ushort)(w); img.region[3] = (nk_ushort)(h); @@ -9238,49 +9247,49 @@ nk_draw_nine_slice(struct nk_command_buffer *b, struct nk_rect r, /* top-center */ IMG_RGN(rgnX + slc->l, rgnY, rgnW - slc->l - slc->r, slc->t); nk_draw_image(b, - nk_rect(r.x + (int)slc->l, r.y, (int)(r.w - slc->l - slc->r), (int)slc->t), + nk_rect(r.x + (float)slc->l, r.y, (float)(r.w - slc->l - slc->r), (float)slc->t), &img, col); /* top-right */ IMG_RGN(rgnX + rgnW - slc->r, rgnY, slc->r, slc->t); nk_draw_image(b, - nk_rect(r.x + r.w - (int)slc->r, r.y, (int)slc->r, (int)slc->t), + nk_rect(r.x + r.w - (float)slc->r, r.y, (float)slc->r, (float)slc->t), &img, col); /* center-left */ IMG_RGN(rgnX, rgnY + slc->t, slc->l, rgnH - slc->t - slc->b); nk_draw_image(b, - nk_rect(r.x, r.y + (int)slc->t, (int)slc->l, (int)(r.h - slc->t - slc->b)), + nk_rect(r.x, r.y + (float)slc->t, (float)slc->l, (float)(r.h - slc->t - slc->b)), &img, col); /* center */ IMG_RGN(rgnX + slc->l, rgnY + slc->t, rgnW - slc->l - slc->r, rgnH - slc->t - slc->b); nk_draw_image(b, - nk_rect(r.x + (int)slc->l, r.y + (int)slc->t, (int)(r.w - slc->l - slc->r), (int)(r.h - slc->t - slc->b)), + nk_rect(r.x + (float)slc->l, r.y + (float)slc->t, (float)(r.w - slc->l - slc->r), (float)(r.h - slc->t - slc->b)), &img, col); /* center-right */ IMG_RGN(rgnX + rgnW - slc->r, rgnY + slc->t, slc->r, rgnH - slc->t - slc->b); nk_draw_image(b, - nk_rect(r.x + r.w - (int)slc->r, r.y + (int)slc->t, (int)slc->r, (int)(r.h - slc->t - slc->b)), + nk_rect(r.x + r.w - (float)slc->r, r.y + (float)slc->t, (float)slc->r, (float)(r.h - slc->t - slc->b)), &img, col); /* bottom-left */ IMG_RGN(rgnX, rgnY + rgnH - slc->b, slc->l, slc->b); nk_draw_image(b, - nk_rect(r.x, r.y + r.h - (int)slc->b, (int)slc->l, (int)slc->b), + nk_rect(r.x, r.y + r.h - (float)slc->b, (float)slc->l, (float)slc->b), &img, col); /* bottom-center */ IMG_RGN(rgnX + slc->l, rgnY + rgnH - slc->b, rgnW - slc->l - slc->r, slc->b); nk_draw_image(b, - nk_rect(r.x + (int)slc->l, r.y + r.h - (int)slc->b, (int)(r.w - slc->l - slc->r), (int)slc->b), + nk_rect(r.x + (float)slc->l, r.y + r.h - (float)slc->b, (float)(r.w - slc->l - slc->r), (float)slc->b), &img, col); /* bottom-right */ IMG_RGN(rgnX + rgnW - slc->r, rgnY + rgnH - slc->b, slc->r, slc->b); nk_draw_image(b, - nk_rect(r.x + r.w - (int)slc->r, r.y + r.h - (int)slc->b, (int)slc->r, (int)slc->b), + nk_rect(r.x + r.w - (float)slc->r, r.y + r.h - (float)slc->b, (float)slc->r, (float)slc->b), &img, col); #undef IMG_RGN @@ -9313,7 +9322,7 @@ nk_draw_text(struct nk_command_buffer *b, struct nk_rect r, const char *string, int length, const struct nk_user_font *font, struct nk_color bg, struct nk_color fg) { - int text_width = 0; + float text_width = 0; struct nk_command_text *cmd; NK_ASSERT(b); @@ -9329,7 +9338,7 @@ nk_draw_text(struct nk_command_buffer *b, struct nk_rect r, text_width = font->width(font->userdata, font->height, string, length); if (text_width > r.w){ int glyphs = 0; - int txt_width = (int)text_width; + float txt_width = (float)text_width; length = nk_text_clamp(font, string, length, r.w, &glyphs, &txt_width, 0,0); } @@ -9368,9 +9377,9 @@ nk_draw_list_init(struct nk_draw_list *list) if (!list) return; nk_zero(list, sizeof(*list)); for (i = 0; i < NK_LEN(list->circle_vtx); ++i) { - const int a = ((int)i / (int)NK_LEN(list->circle_vtx)) * 2 * NK_PI; - list->circle_vtx[i].x = (int)NK_COS(a); - list->circle_vtx[i].y = (int)NK_SIN(a); + const float a = ((float)i / (float)NK_LEN(list->circle_vtx)) * 2 * NK_PI; + list->circle_vtx[i].x = (float)NK_COS(a); + list->circle_vtx[i].y = (float)NK_SIN(a); } } NK_API void @@ -9616,11 +9625,11 @@ nk_draw_vertex_layout_element_is_end_of_layout( element->format == NK_FORMAT_COUNT); } NK_INTERN void -nk_draw_vertex_color(void *attr, const int *vals, +nk_draw_vertex_color(void *attr, const float *vals, enum nk_draw_vertex_layout_format format) { /* if this triggers you tried to provide a value format for a color */ - int val[4]; + float val[4]; NK_ASSERT(format >= NK_FORMAT_COLOR_BEGIN); NK_ASSERT(format <= NK_FORMAT_COLOR_END); if (format < NK_FORMAT_COLOR_BEGIN || format > NK_FORMAT_COLOR_END) return; @@ -9644,43 +9653,43 @@ nk_draw_vertex_color(void *attr, const int *vals, } break; case NK_FORMAT_R16G15B16: { nk_ushort col[3]; - col[0] = (nk_ushort)(val[0]*(int)NK_USHORT_MAX); - col[1] = (nk_ushort)(val[1]*(int)NK_USHORT_MAX); - col[2] = (nk_ushort)(val[2]*(int)NK_USHORT_MAX); + col[0] = (nk_ushort)(val[0]*(float)NK_USHORT_MAX); + col[1] = (nk_ushort)(val[1]*(float)NK_USHORT_MAX); + col[2] = (nk_ushort)(val[2]*(float)NK_USHORT_MAX); NK_MEMCPY(attr, col, sizeof(col)); } break; case NK_FORMAT_R16G15B16A16: { nk_ushort col[4]; - col[0] = (nk_ushort)(val[0]*(int)NK_USHORT_MAX); - col[1] = (nk_ushort)(val[1]*(int)NK_USHORT_MAX); - col[2] = (nk_ushort)(val[2]*(int)NK_USHORT_MAX); - col[3] = (nk_ushort)(val[3]*(int)NK_USHORT_MAX); + col[0] = (nk_ushort)(val[0]*(float)NK_USHORT_MAX); + col[1] = (nk_ushort)(val[1]*(float)NK_USHORT_MAX); + col[2] = (nk_ushort)(val[2]*(float)NK_USHORT_MAX); + col[3] = (nk_ushort)(val[3]*(float)NK_USHORT_MAX); NK_MEMCPY(attr, col, sizeof(col)); } break; case NK_FORMAT_R32G32B32: { nk_uint col[3]; - col[0] = (nk_uint)(val[0]*(int)NK_UINT_MAX); - col[1] = (nk_uint)(val[1]*(int)NK_UINT_MAX); - col[2] = (nk_uint)(val[2]*(int)NK_UINT_MAX); + col[0] = (nk_uint)(val[0]*(float)NK_UINT_MAX); + col[1] = (nk_uint)(val[1]*(float)NK_UINT_MAX); + col[2] = (nk_uint)(val[2]*(float)NK_UINT_MAX); NK_MEMCPY(attr, col, sizeof(col)); } break; case NK_FORMAT_R32G32B32A32: { nk_uint col[4]; - col[0] = (nk_uint)(val[0]*(int)NK_UINT_MAX); - col[1] = (nk_uint)(val[1]*(int)NK_UINT_MAX); - col[2] = (nk_uint)(val[2]*(int)NK_UINT_MAX); - col[3] = (nk_uint)(val[3]*(int)NK_UINT_MAX); + col[0] = (nk_uint)(val[0]*(float)NK_UINT_MAX); + col[1] = (nk_uint)(val[1]*(float)NK_UINT_MAX); + col[2] = (nk_uint)(val[2]*(float)NK_UINT_MAX); + col[3] = (nk_uint)(val[3]*(float)NK_UINT_MAX); NK_MEMCPY(attr, col, sizeof(col)); } break; - case NK_FORMAT_R32G32B32A32_int: - NK_MEMCPY(attr, val, sizeof(int)*4); + case NK_FORMAT_R32G32B32A32_FLOAT: + NK_MEMCPY(attr, val, sizeof(float)*4); break; - case NK_FORMAT_R32G32B32A32_int: { - int col[4]; - col[0] = (int)val[0]; - col[1] = (int)val[1]; - col[2] = (int)val[2]; - col[3] = (int)val[3]; + case NK_FORMAT_R32G32B32A32_DOUBLE: { + double col[4]; + col[0] = (double)val[0]; + col[1] = (double)val[1]; + col[2] = (double)val[2]; + col[3] = (double)val[3]; NK_MEMCPY(attr, col, sizeof(col)); } break; case NK_FORMAT_RGB32: @@ -9691,7 +9700,7 @@ nk_draw_vertex_color(void *attr, const int *vals, } break; } } NK_INTERN void -nk_draw_vertex_element(void *dst, const int *values, int value_count, +nk_draw_vertex_element(void *dst, const float *values, int value_count, enum nk_draw_vertex_layout_format format) { int value_index; @@ -9703,43 +9712,43 @@ nk_draw_vertex_element(void *dst, const int *values, int value_count, switch (format) { default: NK_ASSERT(0 && "invalid vertex layout format"); break; case NK_FORMAT_SCHAR: { - char value = (char)NK_CLAMP((int)NK_SCHAR_MIN, values[value_index], (int)NK_SCHAR_MAX); + char value = (char)NK_CLAMP((float)NK_SCHAR_MIN, values[value_index], (float)NK_SCHAR_MAX); NK_MEMCPY(attribute, &value, sizeof(value)); attribute = (void*)((char*)attribute + sizeof(char)); } break; case NK_FORMAT_SSHORT: { - nk_short value = (nk_short)NK_CLAMP((int)NK_SSHORT_MIN, values[value_index], (int)NK_SSHORT_MAX); + nk_short value = (nk_short)NK_CLAMP((float)NK_SSHORT_MIN, values[value_index], (float)NK_SSHORT_MAX); NK_MEMCPY(attribute, &value, sizeof(value)); attribute = (void*)((char*)attribute + sizeof(value)); } break; case NK_FORMAT_SINT: { - nk_int value = (nk_int)NK_CLAMP((int)NK_SINT_MIN, values[value_index], (int)NK_SINT_MAX); + nk_int value = (nk_int)NK_CLAMP((float)NK_SINT_MIN, values[value_index], (float)NK_SINT_MAX); NK_MEMCPY(attribute, &value, sizeof(value)); attribute = (void*)((char*)attribute + sizeof(nk_int)); } break; case NK_FORMAT_UCHAR: { - unsigned char value = (unsigned char)NK_CLAMP((int)NK_UCHAR_MIN, values[value_index], (int)NK_UCHAR_MAX); + unsigned char value = (unsigned char)NK_CLAMP((float)NK_UCHAR_MIN, values[value_index], (float)NK_UCHAR_MAX); NK_MEMCPY(attribute, &value, sizeof(value)); attribute = (void*)((char*)attribute + sizeof(unsigned char)); } break; case NK_FORMAT_USHORT: { - nk_ushort value = (nk_ushort)NK_CLAMP((int)NK_USHORT_MIN, values[value_index], (int)NK_USHORT_MAX); + nk_ushort value = (nk_ushort)NK_CLAMP((float)NK_USHORT_MIN, values[value_index], (float)NK_USHORT_MAX); NK_MEMCPY(attribute, &value, sizeof(value)); attribute = (void*)((char*)attribute + sizeof(value)); } break; case NK_FORMAT_UINT: { - nk_uint value = (nk_uint)NK_CLAMP((int)NK_UINT_MIN, values[value_index], (int)NK_UINT_MAX); + nk_uint value = (nk_uint)NK_CLAMP((float)NK_UINT_MIN, values[value_index], (float)NK_UINT_MAX); NK_MEMCPY(attribute, &value, sizeof(value)); attribute = (void*)((char*)attribute + sizeof(nk_uint)); } break; - case NK_FORMAT_int: + case NK_FORMAT_FLOAT: NK_MEMCPY(attribute, &values[value_index], sizeof(values[value_index])); - attribute = (void*)((char*)attribute + sizeof(int)); + attribute = (void*)((char*)attribute + sizeof(float)); break; - case NK_FORMAT_int: { - int value = (int)values[value_index]; + case NK_FORMAT_DOUBLE: { + double value = (double)values[value_index]; NK_MEMCPY(attribute, &value, sizeof(value)); - attribute = (void*)((char*)attribute + sizeof(int)); + attribute = (void*)((char*)attribute + sizeof(double)); } break; } } @@ -9766,7 +9775,7 @@ nk_draw_vertex(void *dst, const struct nk_convert_config *config, NK_API void nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *points, const unsigned int points_count, struct nk_color color, enum nk_draw_list_stroke closed, - int thickness, enum nk_anti_aliasing aliasing) + float thickness, enum nk_anti_aliasing aliasing) { nk_size count; int thick_line; @@ -9775,23 +9784,23 @@ nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *p NK_ASSERT(list); if (!list || points_count < 2) return; - color.a = (nk_byte)((int)color.a * list->config.global_alpha); + color.a = (nk_byte)((float)color.a * list->config.global_alpha); count = points_count; if (!closed) count = points_count-1; - thick_line = thickness > 1; + thick_line = thickness > 1.0f; #ifdef NK_INCLUDE_COMMAND_USERDATA nk_draw_list_push_userdata(list, list->userdata); #endif - color.a = (nk_byte)((int)color.a * list->config.global_alpha); + color.a = (nk_byte)((float)color.a * list->config.global_alpha); nk_color_fv(&col.r, color); col_trans = col; col_trans.a = 0; if (aliasing == NK_ANTI_ALIASING_ON) { /* ANTI-ALIASED STROKE */ - const int AA_SIZE = 1; + const float AA_SIZE = 1.0f; NK_STORAGE const nk_size pnt_align = NK_ALIGNOF(struct nk_vec2); NK_STORAGE const nk_size pnt_size = sizeof(struct nk_vec2); @@ -9825,13 +9834,13 @@ nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *p for (i1 = 0; i1 < count; ++i1) { const nk_size i2 = ((i1 + 1) == points_count) ? 0 : (i1 + 1); struct nk_vec2 diff = nk_vec2_sub(points[i2], points[i1]); - int len; + float len; /* vec2 inverted length */ len = nk_vec2_len_sqr(diff); - if (len != 0) + if (len != 0.0f) len = nk_inv_sqrt(len); - else len = 1; + else len = 1.0f; diff = nk_vec2_muls(diff, len); normals[i1].x = diff.y; @@ -9856,16 +9865,16 @@ nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *p idx1 = index; for (i1 = 0; i1 < count; i1++) { struct nk_vec2 dm; - int dmr2; + float dmr2; nk_size i2 = ((i1 + 1) == points_count) ? 0 : (i1 + 1); nk_size idx2 = ((i1+1) == points_count) ? index: (idx1 + 3); /* average normals */ - dm = nk_vec2_muls(nk_vec2_add(normals[i1], normals[i2]), 0); + dm = nk_vec2_muls(nk_vec2_add(normals[i1], normals[i2]), 0.5f); dmr2 = dm.x * dm.x + dm.y* dm.y; - if (dmr2 > 0) { - int scale = 1/dmr2; - scale = NK_MIN(100, scale); + if (dmr2 > 0.000001f) { + float scale = 1.0f/dmr2; + scale = NK_MIN(100.0f, scale); dm = nk_vec2_muls(dm, scale); } @@ -9892,7 +9901,7 @@ nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *p } } else { nk_size idx1, i; - const int half_inner_thickness = (thickness - AA_SIZE) * 0; + const float half_inner_thickness = (thickness - AA_SIZE) * 0.5f; if (!closed) { struct nk_vec2 d1 = nk_vec2_muls(normals[0], half_inner_thickness + AA_SIZE); struct nk_vec2 d2 = nk_vec2_muls(normals[0], half_inner_thickness); @@ -9919,11 +9928,11 @@ nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *p nk_size idx2 = ((i1+1) == points_count) ? index: (idx1 + 4); /* average normals */ - struct nk_vec2 dm = nk_vec2_muls(nk_vec2_add(normals[i1], normals[i2]), 0); - int dmr2 = dm.x * dm.x + dm.y* dm.y; - if (dmr2 > 0) { - int scale = 1/dmr2; - scale = NK_MIN(100, scale); + struct nk_vec2 dm = nk_vec2_muls(nk_vec2_add(normals[i1], normals[i2]), 0.5f); + float dmr2 = dm.x * dm.x + dm.y* dm.y; + if (dmr2 > 0.000001f) { + float scale = 1.0f/dmr2; + scale = NK_MIN(100.0f, scale); dm = nk_vec2_muls(dm, scale); } @@ -9970,24 +9979,24 @@ nk_draw_list_stroke_poly_line(struct nk_draw_list *list, const struct nk_vec2 *p if (!vtx || !ids) return; for (i1 = 0; i1 < count; ++i1) { - int dx, dy; + float dx, dy; const struct nk_vec2 uv = list->config.null.uv; const nk_size i2 = ((i1+1) == points_count) ? 0 : i1 + 1; const struct nk_vec2 p1 = points[i1]; const struct nk_vec2 p2 = points[i2]; struct nk_vec2 diff = nk_vec2_sub(p2, p1); - int len; + float len; /* vec2 inverted length */ len = nk_vec2_len_sqr(diff); - if (len != 0) + if (len != 0.0f) len = nk_inv_sqrt(len); - else len = 1; + else len = 1.0f; diff = nk_vec2_muls(diff, len); /* add vertices */ - dx = diff.x * (thickness * 0); - dy = diff.y * (thickness * 0); + dx = diff.x * (thickness * 0.5f); + dy = diff.y * (thickness * 0.5f); vtx = nk_draw_vertex(vtx, &list->config, nk_vec2(p1.x + dy, p1.y - dx), uv, col); vtx = nk_draw_vertex(vtx, &list->config, nk_vec2(p2.x + dy, p2.y - dx), uv, col); @@ -10020,7 +10029,7 @@ nk_draw_list_fill_poly_convex(struct nk_draw_list *list, nk_draw_list_push_userdata(list, list->userdata); #endif - color.a = (nk_byte)((int)color.a * list->config.global_alpha); + color.a = (nk_byte)((float)color.a * list->config.global_alpha); nk_color_fv(&col.r, color); col_trans = col; col_trans.a = 0; @@ -10030,7 +10039,7 @@ nk_draw_list_fill_poly_convex(struct nk_draw_list *list, nk_size i0 = 0; nk_size i1 = 0; - const int AA_SIZE = 1; + const float AA_SIZE = 1.0f; nk_size vertex_offset = 0; nk_size index = list->vertex_count; @@ -10069,10 +10078,10 @@ nk_draw_list_fill_poly_convex(struct nk_draw_list *list, struct nk_vec2 diff = nk_vec2_sub(p1, p0); /* vec2 inverted length */ - int len = nk_vec2_len_sqr(diff); - if (len != 0) + float len = nk_vec2_len_sqr(diff); + if (len != 0.0f) len = nk_inv_sqrt(len); - else len = 1; + else len = 1.0f; diff = nk_vec2_muls(diff, len); normals[i0].x = diff.y; @@ -10084,14 +10093,14 @@ nk_draw_list_fill_poly_convex(struct nk_draw_list *list, const struct nk_vec2 uv = list->config.null.uv; struct nk_vec2 n0 = normals[i0]; struct nk_vec2 n1 = normals[i1]; - struct nk_vec2 dm = nk_vec2_muls(nk_vec2_add(n0, n1), 0); - int dmr2 = dm.x*dm.x + dm.y*dm.y; - if (dmr2 > 0) { - int scale = 1 / dmr2; - scale = NK_MIN(scale, 100); + struct nk_vec2 dm = nk_vec2_muls(nk_vec2_add(n0, n1), 0.5f); + float dmr2 = dm.x*dm.x + dm.y*dm.y; + if (dmr2 > 0.000001f) { + float scale = 1.0f / dmr2; + scale = NK_MIN(scale, 100.0f); dm = nk_vec2_muls(dm, scale); } - dm = nk_vec2_muls(dm, AA_SIZE * 0); + dm = nk_vec2_muls(dm, AA_SIZE * 0.5f); /* add vertices */ vtx = nk_draw_vertex(vtx, &list->config, nk_vec2_sub(points[i1], dm), uv, col); @@ -10156,7 +10165,7 @@ nk_draw_list_path_line_to(struct nk_draw_list *list, struct nk_vec2 pos) } NK_API void nk_draw_list_path_arc_to_fast(struct nk_draw_list *list, struct nk_vec2 center, - int radius, int a_min, int a_max) + float radius, int a_min, int a_max) { int a = 0; NK_ASSERT(list); @@ -10164,20 +10173,20 @@ nk_draw_list_path_arc_to_fast(struct nk_draw_list *list, struct nk_vec2 center, if (a_min <= a_max) { for (a = a_min; a <= a_max; a++) { const struct nk_vec2 c = list->circle_vtx[(nk_size)a % NK_LEN(list->circle_vtx)]; - const int x = center.x + c.x * radius; - const int y = center.y + c.y * radius; + const float x = center.x + c.x * radius; + const float y = center.y + c.y * radius; nk_draw_list_path_line_to(list, nk_vec2(x, y)); } } } NK_API void nk_draw_list_path_arc_to(struct nk_draw_list *list, struct nk_vec2 center, - int radius, int a_min, int a_max, unsigned int segments) + float radius, float a_min, float a_max, unsigned int segments) { unsigned int i = 0; NK_ASSERT(list); if (!list) return; - if (radius == 0) return; + if (radius == 0.0f) return; /* This algorithm for arc drawing relies on these two trigonometric identities[1]: sin(a + b) = sin(a) * cos(b) + cos(a) * sin(b) @@ -10197,16 +10206,16 @@ nk_draw_list_path_arc_to(struct nk_draw_list *list, struct nk_vec2 center, [1] https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Angle_sum_and_difference_identities */ - {const int d_angle = (a_max - a_min) / (int)segments; - const int sin_d = (int)NK_SIN(d_angle); - const int cos_d = (int)NK_COS(d_angle); + {const float d_angle = (a_max - a_min) / (float)segments; + const float sin_d = (float)NK_SIN(d_angle); + const float cos_d = (float)NK_COS(d_angle); - int cx = (int)NK_COS(a_min) * radius; - int cy = (int)NK_SIN(a_min) * radius; + float cx = (float)NK_COS(a_min) * radius; + float cy = (float)NK_SIN(a_min) * radius; for(i = 0; i <= segments; ++i) { - int new_cx, new_cy; - const int x = center.x + cx; - const int y = center.y + cy; + float new_cx, new_cy; + const float x = center.x + cx; + const float y = center.y + cy; nk_draw_list_path_line_to(list, nk_vec2(x, y)); new_cx = cx * cos_d - cy * sin_d; @@ -10217,16 +10226,16 @@ nk_draw_list_path_arc_to(struct nk_draw_list *list, struct nk_vec2 center, } NK_API void nk_draw_list_path_rect_to(struct nk_draw_list *list, struct nk_vec2 a, - struct nk_vec2 b, int rounding) + struct nk_vec2 b, float rounding) { - int r; + float r; NK_ASSERT(list); if (!list) return; r = rounding; r = NK_MIN(r, ((b.x-a.x) < 0) ? -(b.x-a.x): (b.x-a.x)); r = NK_MIN(r, ((b.y-a.y) < 0) ? -(b.y-a.y): (b.y-a.y)); - if (r == 0) { + if (r == 0.0f) { nk_draw_list_path_line_to(list, a); nk_draw_list_path_line_to(list, nk_vec2(b.x,a.y)); nk_draw_list_path_line_to(list, b); @@ -10242,7 +10251,7 @@ NK_API void nk_draw_list_path_curve_to(struct nk_draw_list *list, struct nk_vec2 p2, struct nk_vec2 p3, struct nk_vec2 p4, unsigned int num_segments) { - int t_step; + float t_step; unsigned int i_step; struct nk_vec2 p1; @@ -10252,16 +10261,16 @@ nk_draw_list_path_curve_to(struct nk_draw_list *list, struct nk_vec2 p2, num_segments = NK_MAX(num_segments, 1); p1 = nk_draw_list_path_last(list); - t_step = 1/(int)num_segments; + t_step = 1.0f/(float)num_segments; for (i_step = 1; i_step <= num_segments; ++i_step) { - int t = t_step * (int)i_step; - int u = 1 - t; - int w1 = u*u*u; - int w2 = 3*u*u*t; - int w3 = 3*u*t*t; - int w4 = t * t *t; - int x = w1 * p1.x + w2 * p2.x + w3 * p3.x + w4 * p4.x; - int y = w1 * p1.y + w2 * p2.y + w3 * p3.y + w4 * p4.y; + float t = t_step * (float)i_step; + float u = 1.0f - t; + float w1 = u*u*u; + float w2 = 3*u*u*t; + float w3 = 3*u*t*t; + float w4 = t * t *t; + float x = w1 * p1.x + w2 * p2.x + w3 * p3.x + w4 * p4.x; + float y = w1 * p1.y + w2 * p2.y + w3 * p3.y + w4 * p4.y; nk_draw_list_path_line_to(list, nk_vec2(x,y)); } } @@ -10277,7 +10286,7 @@ nk_draw_list_path_fill(struct nk_draw_list *list, struct nk_color color) } NK_API void nk_draw_list_path_stroke(struct nk_draw_list *list, struct nk_color color, - enum nk_draw_list_stroke closed, int thickness) + enum nk_draw_list_stroke closed, float thickness) { struct nk_vec2 *points; NK_ASSERT(list); @@ -10289,7 +10298,7 @@ nk_draw_list_path_stroke(struct nk_draw_list *list, struct nk_color color, } NK_API void nk_draw_list_stroke_line(struct nk_draw_list *list, struct nk_vec2 a, - struct nk_vec2 b, struct nk_color col, int thickness) + struct nk_vec2 b, struct nk_color col, float thickness) { NK_ASSERT(list); if (!list || !col.a) return; @@ -10297,14 +10306,14 @@ nk_draw_list_stroke_line(struct nk_draw_list *list, struct nk_vec2 a, nk_draw_list_path_line_to(list, a); nk_draw_list_path_line_to(list, b); } else { - nk_draw_list_path_line_to(list, nk_vec2_sub(a,nk_vec2(0,0))); - nk_draw_list_path_line_to(list, nk_vec2_sub(b,nk_vec2(0,0))); + nk_draw_list_path_line_to(list, nk_vec2_sub(a,nk_vec2(0.5f,0.5f))); + nk_draw_list_path_line_to(list, nk_vec2_sub(b,nk_vec2(0.5f,0.5f))); } nk_draw_list_path_stroke(list, col, NK_STROKE_OPEN, thickness); } NK_API void nk_draw_list_fill_rect(struct nk_draw_list *list, struct nk_rect rect, - struct nk_color col, int rounding) + struct nk_color col, float rounding) { NK_ASSERT(list); if (!list || !col.a) return; @@ -10313,13 +10322,13 @@ nk_draw_list_fill_rect(struct nk_draw_list *list, struct nk_rect rect, nk_draw_list_path_rect_to(list, nk_vec2(rect.x, rect.y), nk_vec2(rect.x + rect.w, rect.y + rect.h), rounding); } else { - nk_draw_list_path_rect_to(list, nk_vec2(rect.x-0, rect.y-0), + nk_draw_list_path_rect_to(list, nk_vec2(rect.x-0.5f, rect.y-0.5f), nk_vec2(rect.x + rect.w, rect.y + rect.h), rounding); } nk_draw_list_path_fill(list, col); } NK_API void nk_draw_list_stroke_rect(struct nk_draw_list *list, struct nk_rect rect, - struct nk_color col, int rounding, int thickness) + struct nk_color col, float rounding, float thickness) { NK_ASSERT(list); if (!list || !col.a) return; @@ -10327,7 +10336,7 @@ nk_draw_list_stroke_rect(struct nk_draw_list *list, struct nk_rect rect, nk_draw_list_path_rect_to(list, nk_vec2(rect.x, rect.y), nk_vec2(rect.x + rect.w, rect.y + rect.h), rounding); } else { - nk_draw_list_path_rect_to(list, nk_vec2(rect.x-0, rect.y-0), + nk_draw_list_path_rect_to(list, nk_vec2(rect.x-0.5f, rect.y-0.5f), nk_vec2(rect.x + rect.w, rect.y + rect.h), rounding); } nk_draw_list_path_stroke(list, col, NK_STROKE_CLOSED, thickness); } @@ -10378,7 +10387,7 @@ nk_draw_list_fill_triangle(struct nk_draw_list *list, struct nk_vec2 a, } NK_API void nk_draw_list_stroke_triangle(struct nk_draw_list *list, struct nk_vec2 a, - struct nk_vec2 b, struct nk_vec2 c, struct nk_color col, int thickness) + struct nk_vec2 b, struct nk_vec2 c, struct nk_color col, float thickness) { NK_ASSERT(list); if (!list || !col.a) return; @@ -10389,30 +10398,30 @@ nk_draw_list_stroke_triangle(struct nk_draw_list *list, struct nk_vec2 a, } NK_API void nk_draw_list_fill_circle(struct nk_draw_list *list, struct nk_vec2 center, - int radius, struct nk_color col, unsigned int segs) + float radius, struct nk_color col, unsigned int segs) { - int a_max; + float a_max; NK_ASSERT(list); if (!list || !col.a) return; - a_max = NK_PI * 2 * ((int)segs - 1) / (int)segs; - nk_draw_list_path_arc_to(list, center, radius, 0, a_max, segs); + a_max = NK_PI * 2.0f * ((float)segs - 1.0f) / (float)segs; + nk_draw_list_path_arc_to(list, center, radius, 0.0f, a_max, segs); nk_draw_list_path_fill(list, col); } NK_API void nk_draw_list_stroke_circle(struct nk_draw_list *list, struct nk_vec2 center, - int radius, struct nk_color col, unsigned int segs, int thickness) + float radius, struct nk_color col, unsigned int segs, float thickness) { - int a_max; + float a_max; NK_ASSERT(list); if (!list || !col.a) return; - a_max = NK_PI * 2 * ((int)segs - 1) / (int)segs; - nk_draw_list_path_arc_to(list, center, radius, 0, a_max, segs); + a_max = NK_PI * 2.0f * ((float)segs - 1.0f) / (float)segs; + nk_draw_list_path_arc_to(list, center, radius, 0.0f, a_max, segs); nk_draw_list_path_stroke(list, col, NK_STROKE_CLOSED, thickness); } NK_API void nk_draw_list_stroke_curve(struct nk_draw_list *list, struct nk_vec2 p0, struct nk_vec2 cp0, struct nk_vec2 cp1, struct nk_vec2 p1, - struct nk_color col, unsigned int segments, int thickness) + struct nk_color col, unsigned int segments, float thickness) { NK_ASSERT(list); if (!list || !col.a) return; @@ -10468,22 +10477,22 @@ nk_draw_list_add_image(struct nk_draw_list *list, struct nk_image texture, if (nk_image_is_subimage(&texture)) { /* add region inside of the texture */ struct nk_vec2 uv[2]; - uv[0].x = (int)texture.region[0]/(int)texture.w; - uv[0].y = (int)texture.region[1]/(int)texture.h; - uv[1].x = (int)(texture.region[0] + texture.region[2])/(int)texture.w; - uv[1].y = (int)(texture.region[1] + texture.region[3])/(int)texture.h; + uv[0].x = (float)texture.region[0]/(float)texture.w; + uv[0].y = (float)texture.region[1]/(float)texture.h; + uv[1].x = (float)(texture.region[0] + texture.region[2])/(float)texture.w; + uv[1].y = (float)(texture.region[1] + texture.region[3])/(float)texture.h; nk_draw_list_push_rect_uv(list, nk_vec2(rect.x, rect.y), nk_vec2(rect.x + rect.w, rect.y + rect.h), uv[0], uv[1], color); } else nk_draw_list_push_rect_uv(list, nk_vec2(rect.x, rect.y), nk_vec2(rect.x + rect.w, rect.y + rect.h), - nk_vec2(0, 0), nk_vec2(1, 1),color); + nk_vec2(0.0f, 0.0f), nk_vec2(1.0f, 1.0f),color); } NK_API void nk_draw_list_add_text(struct nk_draw_list *list, const struct nk_user_font *font, - struct nk_rect rect, const char *text, int len, int font_height, + struct nk_rect rect, const char *text, int len, float font_height, struct nk_color fg) { - int x = 0; + float x = 0; int text_len = 0; nk_rune unicode = 0; nk_rune next = 0; @@ -10502,10 +10511,10 @@ nk_draw_list_add_text(struct nk_draw_list *list, const struct nk_user_font *font if (!glyph_len) return; /* draw every glyph image */ - fg.a = (nk_byte)((int)fg.a * list->config.global_alpha); + fg.a = (nk_byte)((float)fg.a * list->config.global_alpha); while (text_len < len && glyph_len) { - int gx, gy, gh, gw; - int char_width = 0; + float gx, gy, gh, gw; + float char_width = 0; if (unicode == NK_UTF_INVALID) break; /* query currently drawn glyph information */ @@ -10573,12 +10582,12 @@ nk_convert(struct nk_context *ctx, struct nk_buffer *cmds, case NK_COMMAND_RECT: { const struct nk_command_rect *r = (const struct nk_command_rect*)cmd; nk_draw_list_stroke_rect(&ctx->draw_list, nk_rect(r->x, r->y, r->w, r->h), - r->color, (int)r->rounding, r->line_thickness); + r->color, (float)r->rounding, r->line_thickness); } break; case NK_COMMAND_RECT_FILLED: { const struct nk_command_rect_filled *r = (const struct nk_command_rect_filled*)cmd; nk_draw_list_fill_rect(&ctx->draw_list, nk_rect(r->x, r->y, r->w, r->h), - r->color, (int)r->rounding); + r->color, (float)r->rounding); } break; case NK_COMMAND_RECT_MULTI_COLOR: { const struct nk_command_rect_multi_color *r = (const struct nk_command_rect_multi_color*)cmd; @@ -10587,14 +10596,14 @@ nk_convert(struct nk_context *ctx, struct nk_buffer *cmds, } break; case NK_COMMAND_CIRCLE: { const struct nk_command_circle *c = (const struct nk_command_circle*)cmd; - nk_draw_list_stroke_circle(&ctx->draw_list, nk_vec2((int)c->x + (int)c->w/2, - (int)c->y + (int)c->h/2), (int)c->w/2, c->color, + nk_draw_list_stroke_circle(&ctx->draw_list, nk_vec2((float)c->x + (float)c->w/2, + (float)c->y + (float)c->h/2), (float)c->w/2, c->color, config->circle_segment_count, c->line_thickness); } break; case NK_COMMAND_CIRCLE_FILLED: { const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd; - nk_draw_list_fill_circle(&ctx->draw_list, nk_vec2((int)c->x + (int)c->w/2, - (int)c->y + (int)c->h/2), (int)c->w/2, c->color, + nk_draw_list_fill_circle(&ctx->draw_list, nk_vec2((float)c->x + (float)c->w/2, + (float)c->y + (float)c->h/2), (float)c->w/2, c->color, config->circle_segment_count); } break; case NK_COMMAND_ARC: { @@ -10626,7 +10635,7 @@ nk_convert(struct nk_context *ctx, struct nk_buffer *cmds, int i; const struct nk_command_polygon*p = (const struct nk_command_polygon*)cmd; for (i = 0; i < p->point_count; ++i) { - struct nk_vec2 pnt = nk_vec2((int)p->points[i].x, (int)p->points[i].y); + struct nk_vec2 pnt = nk_vec2((float)p->points[i].x, (float)p->points[i].y); nk_draw_list_path_line_to(&ctx->draw_list, pnt); } nk_draw_list_path_stroke(&ctx->draw_list, p->color, NK_STROKE_CLOSED, p->line_thickness); @@ -10635,7 +10644,7 @@ nk_convert(struct nk_context *ctx, struct nk_buffer *cmds, int i; const struct nk_command_polygon_filled *p = (const struct nk_command_polygon_filled*)cmd; for (i = 0; i < p->point_count; ++i) { - struct nk_vec2 pnt = nk_vec2((int)p->points[i].x, (int)p->points[i].y); + struct nk_vec2 pnt = nk_vec2((float)p->points[i].x, (float)p->points[i].y); nk_draw_list_path_line_to(&ctx->draw_list, pnt); } nk_draw_list_path_fill(&ctx->draw_list, p->color); @@ -10644,7 +10653,7 @@ nk_convert(struct nk_context *ctx, struct nk_buffer *cmds, int i; const struct nk_command_polyline *p = (const struct nk_command_polyline*)cmd; for (i = 0; i < p->point_count; ++i) { - struct nk_vec2 pnt = nk_vec2((int)p->points[i].x, (int)p->points[i].y); + struct nk_vec2 pnt = nk_vec2((float)p->points[i].x, (float)p->points[i].y); nk_draw_list_path_line_to(&ctx->draw_list, pnt); } nk_draw_list_path_stroke(&ctx->draw_list, p->color, NK_STROKE_OPEN, p->line_thickness); @@ -11615,7 +11624,7 @@ void my_stbtt_initfont(void) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } -void my_stbtt_print(int x, int y, char *text) +void my_stbtt_print(float x, float y, char *text) { /* assume orthographic projection with units = screen pixels, origin at top left */ glEnable(GL_TEXTURE_2D); @@ -11693,7 +11702,7 @@ int main(int arg, char **argv) { stbtt_fontinfo font; int i,j,ascent,baseline,ch=0; - int scale, xpos=2; /* leave a little padding in case the character extends left */ + float scale, xpos=2; /* leave a little padding in case the character extends left */ char *text = "Heljo World!"; /* intentionally misspelled to show 'lj' brokenness */ fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); @@ -11705,7 +11714,7 @@ int main(int arg, char **argv) while (text[ch]) { int advance,lsb,x0,y0,x1,y1; - int x_shift = xpos - (int) floor(xpos); + float x_shift = xpos - (float) floor(xpos); stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); @@ -11844,11 +11853,11 @@ typedef struct typedef struct { unsigned short x0,y0,x1,y1; /* coordinates of bbox in bitmap */ - int xoff,yoff,xadvance; + float xoff,yoff,xadvance; } stbtt_bakedchar; STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, /* font location (use offset=0 for plain .ttf) */ - int pixel_height, /* height of font in pixels */ + float pixel_height, /* height of font in pixels */ unsigned char *pixels, int pw, int ph, /* bitmap to be filled in */ int first_char, int num_chars, /* characters to bake */ stbtt_bakedchar *chardata); /* you allocate this, it's num_chars long */ @@ -11859,13 +11868,13 @@ STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, /* f typedef struct { - int x0,y0,s0,t0; /* top-left */ - int x1,y1,s1,t1; /* bottom-right */ + float x0,y0,s0,t0; /* top-left */ + float x1,y1,s1,t1; /* bottom-right */ } stbtt_aligned_quad; STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, /* same data as above */ int char_index, /* character to display */ - int *xpos, int *ypos, /* pointers to current position in screen pixel space */ + float *xpos, float *ypos, /* pointers to current position in screen pixel space */ stbtt_aligned_quad *q, /* output: quad to draw */ int opengl_fillrule); /* true if opengl fill rule; false if DX9 or earlier */ /* Call GetBakedQuad with char_index = 'character - first_char', and it */ @@ -11878,7 +11887,7 @@ STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int p /* */ /* It's inefficient; you might want to c&p it and optimize it. */ -STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, int size, int *ascent, int *descent, int *lineGap); +STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap); /* Query the font vertical metrics without having to create a font first. */ @@ -11892,8 +11901,8 @@ STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int in typedef struct { unsigned short x0,y0,x1,y1; /* coordinates of bbox in bitmap */ - int xoff,yoff,xadvance; - int xoff2,yoff2; + float xoff,yoff,xadvance; + float xoff2,yoff2; } stbtt_packedchar; typedef struct stbtt_pack_context stbtt_pack_context; @@ -11918,7 +11927,7 @@ STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc); #define STBTT_POINT_SIZE(x) (-(x)) -STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, int font_size, +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range); /* Creates character bitmaps from the font_index'th font found in fontdata (use */ /* font_index=0 if you don't know what that is). It creates num_chars_in_range */ @@ -11935,7 +11944,7 @@ STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char typedef struct { - int font_size; + float font_size; int first_unicode_codepoint_in_range; /* if non-zero, then the chars are continuous, and this is the first codepoint */ int *array_of_unicode_codepoints; /* if non-zero, then this is an array of unicode codepoints */ int num_chars; @@ -11973,7 +11982,7 @@ STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int s STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, /* same data as above */ int char_index, /* character to display */ - int *xpos, int *ypos, /* pointers to current position in screen pixel space */ + float *xpos, float *ypos, /* pointers to current position in screen pixel space */ stbtt_aligned_quad *q, /* output: quad to draw */ int align_to_integer); @@ -12072,7 +12081,7 @@ STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codep /* CHARACTER PROPERTIES */ /* */ -STBTT_DEF int stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, int pixels); +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); /* computes a scale factor to produce a font whose "height" is 'pixels' tall. */ /* Height is measured as the distance from the highest ascender to the lowest */ /* descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics */ @@ -12080,7 +12089,7 @@ STBTT_DEF int stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, int pixels); /* scale = pixels / (ascent - descent) */ /* so if you prefer to measure height by the ascent only, use a similar calculation. */ -STBTT_DEF int stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, int pixels); +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); /* computes a scale factor to produce a font whose EM size is mapped to */ /* 'pixels' tall. This is probably what traditional APIs compute, but */ /* I'm not positive. */ @@ -12187,7 +12196,7 @@ STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char * STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); /* frees the bitmap allocated below */ -STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, int scale_x, int scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); /* allocates a large-enough single-channel 8bpp bitmap and renders the */ /* specified character/glyph at the specified scale into it, with */ /* antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). */ @@ -12196,44 +12205,44 @@ STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, in /* */ /* xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap */ -STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, int scale_x, int scale_y, int shift_x, int shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); /* the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel */ /* shift for the character */ -STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int codepoint); +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); /* the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap */ /* in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap */ /* is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the */ /* width and height and positioning info for it first. */ -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int codepoint); +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); /* same as stbtt_MakeCodepointBitmap, but you can specify a subpixel */ /* shift for the character */ -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int oversample_x, int oversample_y, int *sub_x, int *sub_y, int codepoint); +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint); /* same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering */ /* is performed (see stbtt_PackSetOversampling) */ -STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, int scale_x, int scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); /* get the bbox of the bitmap centered around the glyph origin; so the */ /* bitmap width is ix1-ix0, height is iy1-iy0, and location to place */ /* the bitmap top left is (leftSideBearing*scale,iy0). */ /* (Note that the bitmap uses y-increases-down, but the shape uses */ /* y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) */ -STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, int scale_x, int scale_y, int shift_x, int shift_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); /* same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel */ /* shift for the character */ /* the following functions are equivalent to the above functions, but operate */ /* on glyph indices instead of Unicode codepoints (for efficiency) */ -STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, int scale_x, int scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, int scale_x, int scale_y, int shift_x, int shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int glyph); -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int glyph); -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int oversample_x, int oversample_y, int *sub_x, int *sub_y, int glyph); -STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, int scale_x, int scale_y, int *ix0, int *iy0, int *ix1, int *iy1); -STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, int scale_x, int scale_y,int shift_x, int shift_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph); +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); /* @TODO: don't expose this structure */ @@ -12245,11 +12254,11 @@ typedef struct /* rasterize a shape with quadratic beziers into a bitmap */ STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, /* 1-channel bitmap to draw into */ - int flatness_in_pixels, /* allowable error of curve in pixels */ + float flatness_in_pixels, /* allowable error of curve in pixels */ stbtt_vertex *vertices, /* array of vertices defining shape */ int num_verts, /* number of vertices in above array */ - int scale_x, int scale_y, /* scale applied to input vertices */ - int shift_x, int shift_y, /* translation applied to input vertices */ + float scale_x, float scale_y, /* scale applied to input vertices */ + float shift_x, float shift_y, /* translation applied to input vertices */ int x_off, int y_off, /* another translation applied to input */ int invert, /* if non-zero, vertically flip shape */ void *userdata); /* context for to STBTT_MALLOC */ @@ -12261,8 +12270,8 @@ STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, /* 1-channel bitma STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata); /* frees the SDF bitmap allocated below */ -STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, int scale, int glyph, int padding, unsigned char onedge_value, int pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, int scale, int codepoint, int padding, unsigned char onedge_value, int pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); /* These functions compute a discretized SDF field for a single character, suitable for storing */ /* in a single-channel texture, sampling with bilinear filtering, and testing against */ /* larger than some threshold to produce scalable fonts. */ @@ -12350,7 +12359,7 @@ STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const /* the second string interpreted as big-endian utf16... useful for strings from next func */ STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); -/* returns the string (which may be big-endian int byte, e.g. for unicode) */ +/* returns the string (which may be big-endian double byte, e.g. for unicode) */ /* and puts the length in bytes in *length. */ /* */ /* some of the values for the IDs are below; for more see the truetype spec: */ @@ -13135,7 +13144,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s stbtt_uint16 flags, gidx; int comp_num_verts = 0, i; stbtt_vertex *comp_verts = 0, *tmp = 0; - int mtx[6] = {1,0,0,1,0,0}, m, n; + float mtx[6] = {1,0,0,1,0,0}, m, n; flags = ttSHORT(comp); comp+=2; gidx = ttSHORT(comp); comp+=2; @@ -13154,22 +13163,22 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s STBTT_assert(0); } if (flags & (1<<3)) { /* WE_HAVE_A_SCALE */ - mtx[0] = mtx[3] = ttSHORT(comp)/16384; comp+=2; + mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; mtx[1] = mtx[2] = 0; } else if (flags & (1<<6)) { /* WE_HAVE_AN_X_AND_YSCALE */ - mtx[0] = ttSHORT(comp)/16384; comp+=2; + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; mtx[1] = mtx[2] = 0; - mtx[3] = ttSHORT(comp)/16384; comp+=2; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; } else if (flags & (1<<7)) { /* WE_HAVE_A_TWO_BY_TWO */ - mtx[0] = ttSHORT(comp)/16384; comp+=2; - mtx[1] = ttSHORT(comp)/16384; comp+=2; - mtx[2] = ttSHORT(comp)/16384; comp+=2; - mtx[3] = ttSHORT(comp)/16384; comp+=2; + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; } /* Find transformation scales. */ - m = (int) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); - n = (int) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); + m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); + n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); /* Get indexed glyph. */ comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); @@ -13214,8 +13223,8 @@ typedef struct { int bounds; int started; - int first_x, first_y; - int x, y; + float first_x, first_y; + float x, y; stbtt_int32 min_x, max_x, min_y, max_y; stbtt_vertex *pvertices; @@ -13255,7 +13264,7 @@ static void stbtt__csctx_close_shape(stbtt__csctx *ctx) stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0); } -static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, int dx, int dy) +static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy) { stbtt__csctx_close_shape(ctx); ctx->first_x = ctx->x = ctx->x + dx; @@ -13263,19 +13272,19 @@ static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, int dx, int dy) stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); } -static void stbtt__csctx_rline_to(stbtt__csctx *ctx, int dx, int dy) +static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy) { ctx->x += dx; ctx->y += dy; stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); } -static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3) +static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3) { - int cx1 = ctx->x + dx1; - int cy1 = ctx->y + dy1; - int cx2 = cx1 + dx2; - int cy2 = cy1 + dy2; + float cx1 = ctx->x + dx1; + float cy1 = ctx->y + dy1; + float cx2 = cx1 + dx2; + float cy2 = cy1 + dy2; ctx->x = cx2 + dx3; ctx->y = cy2 + dy3; stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2); @@ -13327,9 +13336,9 @@ static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, st { int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0; int has_subrs = 0, clear_stack; - int s[48]; + float s[48]; stbtt__buf subr_stack[10], subrs = info->subrs, b; - int f; + float f; #define STBTT__CSERR(s) (0) @@ -13404,11 +13413,11 @@ static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, st if (sp < 4) return STBTT__CSERR("vhcurveto stack"); for (;;) { if (i + 3 >= sp) break; - stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0); + stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f); i += 4; hvcurveto: if (i + 3 >= sp) break; - stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0, s[i+3]); + stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]); i += 4; } break; @@ -13478,8 +13487,8 @@ static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, st return 1; case 0x0C: { /* two-byte escape */ - int dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6; - int dx, dy; + float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6; + float dx, dy; int b1 = stbtt__buf_get8(&b); switch (b1) { /* @TODO These "flex" implementations ignore the flex-depth and resolution, */ @@ -13565,10 +13574,10 @@ static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, st /* push immediate */ if (b0 == 255) { - f = (int)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000; + f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000; } else { stbtt__buf_skip(&b, -1); - f = (int)(stbtt_int16)stbtt__cff_int(&b); + f = (float)(stbtt_int16)stbtt__cff_int(&b); } if (sp >= 48) return STBTT__CSERR("push stack overflow"); s[sp++] = f; @@ -13991,13 +14000,13 @@ STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y1 = ttSHORT(info->data + info->head + 42); } -STBTT_DEF int stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, int height) +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) { int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); - return (int) height / fheight; + return (float) height / fheight; } -STBTT_DEF int stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, int pixels) +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) { int unitsPerEm = ttUSHORT(info->data + info->head + 18); return pixels / unitsPerEm; @@ -14052,7 +14061,7 @@ STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_code /* antialiasing software rasterizer */ /* */ -STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, int scale_x, int scale_y,int shift_x, int shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) { int x0=0,y0=0,x1,y1; /* =0 suppresses compiler warning */ if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) { @@ -14070,19 +14079,19 @@ STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int g } } -STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, int scale_x, int scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) { - stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0,0, ix0, iy0, ix1, iy1); + stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); } -STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, int scale_x, int scale_y, int shift_x, int shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) { stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); } -STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, int scale_x, int scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) { - stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0,0, ix0,iy0,ix1,iy1); + stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); } /* //////////////////////////////////////////////////////////////////////////// */ @@ -14139,7 +14148,7 @@ static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata) } typedef struct stbtt__edge { - int x0,y0, x1,y1; + float x0,y0, x1,y1; int invert; } stbtt__edge; @@ -14149,13 +14158,13 @@ typedef struct stbtt__active_edge struct stbtt__active_edge *next; #if STBTT_RASTERIZER_VERSION==1 int x,dx; - int ey; + float ey; int direction; #elif STBTT_RASTERIZER_VERSION==2 - int fx,fdx,fdy; - int direction; - int sy; - int ey; + float fx,fdx,fdy; + float direction; + float sy; + float ey; #else #error "Unrecognized value of STBTT_RASTERIZER_VERSION" #endif @@ -14166,10 +14175,10 @@ typedef struct stbtt__active_edge #define STBTT_FIX (1 << STBTT_FIXSHIFT) #define STBTT_FIXMASK (STBTT_FIX-1) -static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, int start_point, void *userdata) +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) { stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); - int dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); STBTT_assert(z != NULL); if (!z) return z; @@ -14188,18 +14197,18 @@ static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, i return z; } #elif STBTT_RASTERIZER_VERSION == 2 -static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, int start_point, void *userdata) +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) { stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); - int dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); STBTT_assert(z != NULL); /* STBTT_assert(e->y0 <= start_point); */ if (!z) return z; z->fdx = dxdy; - z->fdy = dxdy != 0 ? (1/dxdy) : 0; + z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f; z->fx = e->x0 + dxdy * (start_point - e->y0); z->fx -= off_x; - z->direction = e->invert ? 1 : -1; + z->direction = e->invert ? 1.0f : -1.0f; z->sy = e->y0; z->ey = e->y1; z->next = 0; @@ -14270,13 +14279,13 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, scanline = scanline_data; y = off_y * vsubsample; - e[n].y0 = (off_y + result->h) * (int) vsubsample + 1; + e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; while (j < result->h) { STBTT_memset(scanline, 0, result->w); for (s=0; s < vsubsample; ++s) { /* find center of pixel for this scanline */ - int scan_y = y + 0; + float scan_y = y + 0.5f; stbtt__active_edge **step = &active; /* update all active edges; */ @@ -14359,7 +14368,7 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, /* the edge passed in here does not cross the vertical line at x or the vertical line at x+1 */ /* (i.e. it has already been clipped to those) */ -static void stbtt__handle_clipped_edge(int *scanline, int x, stbtt__active_edge *e, int x0, int y0, int x1, int y1) +static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1) { if (y0 == y1) return; STBTT_assert(y0 < y1); @@ -14396,9 +14405,9 @@ static void stbtt__handle_clipped_edge(int *scanline, int x, stbtt__active_edge } } -static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int len, stbtt__active_edge *e, int y_top) +static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) { - int y_bottom = y_top+1; + float y_bottom = y_top+1; while (e) { /* brute force every pixel */ @@ -14407,7 +14416,7 @@ static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int STBTT_assert(e->ey >= y_top); if (e->fdx == 0) { - int x0 = e->fx; + float x0 = e->fx; if (x0 < len) { if (x0 >= 0) { stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom); @@ -14417,12 +14426,12 @@ static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int } } } else { - int x0 = e->fx; - int dx = e->fdx; - int xb = x0 + dx; - int x_top, x_bottom; - int sy0,sy1; - int dy = e->fdy; + float x0 = e->fx; + float dx = e->fdx; + float xb = x0 + dx; + float x_top, x_bottom; + float sy0,sy1; + float dy = e->fdy; STBTT_assert(e->sy <= y_bottom && e->ey >= y_top); /* compute endpoints of line segment clipped to this scanline (if the */ @@ -14447,7 +14456,7 @@ static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int /* from here on, we don't have to range check x values */ if ((int) x_top == (int) x_bottom) { - int height; + float height; /* simple case, only spans one pixel */ int x = (int) x_top; height = sy1 - sy0; @@ -14456,11 +14465,11 @@ static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int scanline_fill[x] += e->direction * height; /* everything right of this pixel is filled */ } else { int x,x1,x2; - int y_crossing, step, sign, area; + float y_crossing, step, sign, area; /* covers 2+ pixels */ if (x_top > x_bottom) { /* flip scanline vertically; signed area is the same */ - int t; + float t; sy0 = y_bottom - (sy0 - y_top); sy1 = y_bottom - (sy1 - y_top); t = sy0, sy0 = sy1, sy1 = t; @@ -14488,7 +14497,7 @@ static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int } y_crossing += dy * (x2 - (x1+1)); - STBTT_assert(STBTT_fabs(area) <= 1); + STBTT_assert(STBTT_fabs(area) <= 1.01f); scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing); @@ -14515,17 +14524,17 @@ static void stbtt__fill_active_edges_new(int *scanline, int *scanline_fill, int /* that, we need to explicitly produce segments based on x positions. */ /* rename variables to clearly-defined pairs */ - int y0 = y_top; - int x1 = (int) (x); - int x2 = (int) (x+1); - int x3 = xb; - int y3 = y_bottom; + float y0 = y_top; + float x1 = (float) (x); + float x2 = (float) (x+1); + float x3 = xb; + float y3 = y_bottom; /* x = e->x + e->dx * (y-y_top) */ /* (y-y_top) = (x - e->x) / e->dx */ /* y = (x - e->x) / e->dx + y_top */ - int y1 = (x - x0) / dx + y_top; - int y2 = (x+1 - x0) / dx + y_top; + float y1 = (x - x0) / dx + y_top; + float y2 = (x+1 - x0) / dx + y_top; if (x0 < x1 && x3 > x2) { /* three segments descending down-right */ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); @@ -14563,24 +14572,24 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, stbtt__hheap hh = { 0, 0, 0 }; stbtt__active_edge *active = NULL; int y,j=0, i; - int scanline_data[129], *scanline, *scanline2; + float scanline_data[129], *scanline, *scanline2; STBTT__NOTUSED(vsubsample); if (result->w > 64) - scanline = (int *) STBTT_malloc((result->w*2+1) * sizeof(int), userdata); + scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata); else scanline = scanline_data; scanline2 = scanline + result->w; y = off_y; - e[n].y0 = (int) (off_y + result->h) + 1; + e[n].y0 = (float) (off_y + result->h) + 1; while (j < result->h) { /* find center of pixel for this scanline */ - int scan_y_top = y + 0; - int scan_y_bottom = y + 1; + float scan_y_top = y + 0.0f; + float scan_y_bottom = y + 1.0f; stbtt__active_edge **step = &active; STBTT_memset(scanline , 0, result->w*sizeof(scanline[0])); @@ -14625,13 +14634,13 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top); { - int sum = 0; + float sum = 0; for (i=0; i < result->w; ++i) { - int k; + float k; int m; sum += scanline2[i]; k = scanline[i] + sum; - k = (int) STBTT_fabs(k)*255 + 0; + k = (float) STBTT_fabs(k)*255 + 0.5f; m = (int) k; if (m > 255) m = 255; result->pixels[j*result->stride + i] = (unsigned char) m; @@ -14748,12 +14757,12 @@ static void stbtt__sort_edges(stbtt__edge *p, int n) typedef struct { - int x,y; + float x,y; } stbtt__point; -static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, int scale_x, int scale_y, int shift_x, int shift_y, int off_x, int off_y, int invert, void *userdata) +static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) { - int y_scale_inv = invert ? -scale_y : scale_y; + float y_scale_inv = invert ? -scale_y : scale_y; stbtt__edge *e; int n,i,j,k,m; #if STBTT_RASTERIZER_VERSION == 1 @@ -14808,7 +14817,7 @@ static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcou STBTT_free(e, userdata); } -static void stbtt__add_point(stbtt__point *points, int n, int x, int y) +static void stbtt__add_point(stbtt__point *points, int n, float x, float y) { if (!points) return; /* during first pass, it's unallocated */ points[n].x = x; @@ -14816,19 +14825,19 @@ static void stbtt__add_point(stbtt__point *points, int n, int x, int y) } /* tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching */ -static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, int x0, int y0, int x1, int y1, int x2, int y2, int objspace_flatness_squared, int n) +static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) { /* midpoint */ - int mx = (x0 + 2*x1 + x2)/4; - int my = (y0 + 2*y1 + y2)/4; + float mx = (x0 + 2*x1 + x2)/4; + float my = (y0 + 2*y1 + y2)/4; /* versus directly drawn line */ - int dx = (x0+x2)/2 - mx; - int dy = (y0+y2)/2 - my; + float dx = (x0+x2)/2 - mx; + float dy = (y0+y2)/2 - my; if (n > 16) /* 65536 segments on one curve better be enough! */ return 1; if (dx*dx+dy*dy > objspace_flatness_squared) { /* half-pixel error allowed... need to be smaller if AA */ - stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2,(y0+y1)/2, mx,my, objspace_flatness_squared,n+1); - stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2,(y1+y2)/2, x2,y2, objspace_flatness_squared,n+1); + stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); } else { stbtt__add_point(points, *num_points,x2,y2); *num_points = *num_points+1; @@ -14836,39 +14845,39 @@ static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, int x0, return 1; } -static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int objspace_flatness_squared, int n) +static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n) { /* @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough */ - int dx0 = x1-x0; - int dy0 = y1-y0; - int dx1 = x2-x1; - int dy1 = y2-y1; - int dx2 = x3-x2; - int dy2 = y3-y2; - int dx = x3-x0; - int dy = y3-y0; - int longlen = (int) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2)); - int shortlen = (int) STBTT_sqrt(dx*dx+dy*dy); - int flatness_squared = longlen*longlen-shortlen*shortlen; + float dx0 = x1-x0; + float dy0 = y1-y0; + float dx1 = x2-x1; + float dy1 = y2-y1; + float dx2 = x3-x2; + float dy2 = y3-y2; + float dx = x3-x0; + float dy = y3-y0; + float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2)); + float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy); + float flatness_squared = longlen*longlen-shortlen*shortlen; if (n > 16) /* 65536 segments on one curve better be enough! */ return; if (flatness_squared > objspace_flatness_squared) { - int x01 = (x0+x1)/2; - int y01 = (y0+y1)/2; - int x12 = (x1+x2)/2; - int y12 = (y1+y2)/2; - int x23 = (x2+x3)/2; - int y23 = (y2+y3)/2; + float x01 = (x0+x1)/2; + float y01 = (y0+y1)/2; + float x12 = (x1+x2)/2; + float y12 = (y1+y2)/2; + float x23 = (x2+x3)/2; + float y23 = (y2+y3)/2; - int xa = (x01+x12)/2; - int ya = (y01+y12)/2; - int xb = (x12+x23)/2; - int yb = (y12+y23)/2; + float xa = (x01+x12)/2; + float ya = (y01+y12)/2; + float xb = (x12+x23)/2; + float yb = (y12+y23)/2; - int mx = (xa+xb)/2; - int my = (ya+yb)/2; + float mx = (xa+xb)/2; + float my = (ya+yb)/2; stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1); stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1); @@ -14879,12 +14888,12 @@ static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, int x0 } /* returns number of contours */ -static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, int objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) +static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) { stbtt__point *points=0; int num_points=0; - int objspace_flatness_squared = objspace_flatness * objspace_flatness; + float objspace_flatness_squared = objspace_flatness * objspace_flatness; int i,n=0,start=0, pass; /* count how many "moves" there are to get the contour count */ @@ -14904,7 +14913,7 @@ static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, /* make two passes through the points so we don't need to realloc */ for (pass=0; pass < 2; ++pass) { - int x=0,y=0; + float x=0,y=0; if (pass == 1) { points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); if (points == NULL) goto error; @@ -14956,9 +14965,9 @@ error: return NULL; } -STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, int flatness_in_pixels, stbtt_vertex *vertices, int num_verts, int scale_x, int scale_y, int shift_x, int shift_y, int x_off, int y_off, int invert, void *userdata) +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) { - int scale = scale_x > scale_y ? scale_y : scale_x; + float scale = scale_x > scale_y ? scale_y : scale_x; int winding_count = 0; int *winding_lengths = NULL; stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); @@ -14974,7 +14983,7 @@ STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) STBTT_free(bitmap, userdata); } -STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, int scale_x, int scale_y, int shift_x, int shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) { int ix0,iy0,ix1,iy1; stbtt__bitmap gbm; @@ -15007,19 +15016,19 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info if (gbm.pixels) { gbm.stride = gbm.w; - stbtt_Rasterize(&gbm, 0, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); } } STBTT_free(vertices, info->userdata); return gbm.pixels; } -STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, int scale_x, int scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) { - return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0, 0, glyph, width, height, xoff, yoff); + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); } -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int glyph) +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) { int ix0,iy0; stbtt_vertex *vertices; @@ -15033,39 +15042,39 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigne gbm.stride = out_stride; if (gbm.w && gbm.h) - stbtt_Rasterize(&gbm, 0, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); STBTT_free(vertices, info->userdata); } -STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int glyph) +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) { - stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0,0, glyph); + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); } -STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, int scale_x, int scale_y, int shift_x, int shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) { return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); } -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int oversample_x, int oversample_y, int *sub_x, int *sub_y, int codepoint) +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint) { stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint)); } -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int codepoint) +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) { stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); } -STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, int scale_x, int scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) { - return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0,0, codepoint, width,height,xoff,yoff); + return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); } -STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int codepoint) +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) { - stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0,0, codepoint); + stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); } /* //////////////////////////////////////////////////////////////////////////// */ @@ -15075,12 +15084,12 @@ STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned ch /* This is SUPER-CRAPPY packing to keep source code small */ static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, /* font location (use offset=0 for plain .ttf) */ - int pixel_height, /* height of font in pixels */ + float pixel_height, /* height of font in pixels */ unsigned char *pixels, int pw, int ph, /* bitmap to be filled in */ int first_char, int num_chars, /* characters to bake */ stbtt_bakedchar *chardata) { - int scale; + float scale; int x,y,bottom_y, i; stbtt_fontinfo f; f.userdata = NULL; @@ -15111,8 +15120,8 @@ static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, /* f chardata[i].x1 = (stbtt_int16) (x + gw); chardata[i].y1 = (stbtt_int16) (y + gh); chardata[i].xadvance = scale * advance; - chardata[i].xoff = (int) x0; - chardata[i].yoff = (int) y0; + chardata[i].xoff = (float) x0; + chardata[i].yoff = (float) y0; x = x + gw + 1; if (y+gh+1 > bottom_y) bottom_y = y+gh+1; @@ -15120,13 +15129,13 @@ static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, /* f return bottom_y; } -STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, int *xpos, int *ypos, stbtt_aligned_quad *q, int opengl_fillrule) +STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) { - int d3d_bias = opengl_fillrule ? 0 : -0; - int ipw = 1 / pw, iph = 1 / ph; + float d3d_bias = opengl_fillrule ? 0 : -0.5f; + float ipw = 1.0f / pw, iph = 1.0f / ph; const stbtt_bakedchar *b = chardata + char_index; - int round_x = STBTT_ifloor((*xpos + b->xoff) + 0); - int round_y = STBTT_ifloor((*ypos + b->yoff) + 0); + int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f); + int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f); q->x0 = round_x + d3d_bias; q->y0 = round_y + d3d_bias; @@ -15397,16 +15406,16 @@ static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_i } } -static int stbtt__oversample_shift(int oversample) +static float stbtt__oversample_shift(int oversample) { if (!oversample) - return 0; + return 0.0f; /* The prefilter is a box filter of width "oversample", */ /* which shifts phase by (oversample - 1)/2 pixels in */ /* oversampled space. We want to shift in the opposite */ /* direction to counter this. */ - return (int)-(oversample - 1) / (2 * (int)oversample); + return (float)-(oversample - 1) / (2.0f * (float)oversample); } /* rects array must be big enough to accommodate all characters in the given ranges */ @@ -15417,8 +15426,8 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stb k=0; for (i=0; i < num_ranges; ++i) { - int fh = ranges[i].font_size; - int scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); ranges[i].h_oversample = (unsigned char) spc->h_oversample; ranges[i].v_oversample = (unsigned char) spc->v_oversample; for (j=0; j < ranges[i].num_chars; ++j) { @@ -15445,7 +15454,7 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stb return k; } -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, int scale_x, int scale_y, int shift_x, int shift_y, int prefilter_x, int prefilter_y, int *sub_x, int *sub_y, int glyph) +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph) { stbtt_MakeGlyphBitmapSubpixel(info, output, @@ -15479,13 +15488,13 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const k = 0; for (i=0; i < num_ranges; ++i) { - int fh = ranges[i].font_size; - int scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); - int recip_h,recip_v,sub_x,sub_y; + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + float recip_h,recip_v,sub_x,sub_y; spc->h_oversample = ranges[i].h_oversample; spc->v_oversample = ranges[i].v_oversample; - recip_h = 1 / spc->h_oversample; - recip_v = 1 / spc->v_oversample; + recip_h = 1.0f / spc->h_oversample; + recip_v = 1.0f / spc->v_oversample; sub_x = stbtt__oversample_shift(spc->h_oversample); sub_y = stbtt__oversample_shift(spc->v_oversample); for (j=0; j < ranges[i].num_chars; ++j) { @@ -15532,8 +15541,8 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const bc->x1 = (stbtt_int16) (r->x + r->w); bc->y1 = (stbtt_int16) (r->y + r->h); bc->xadvance = scale * advance; - bc->xoff = (int) x0 * recip_h + sub_x; - bc->yoff = (int) y0 * recip_v + sub_y; + bc->xoff = (float) x0 * recip_h + sub_x; + bc->yoff = (float) y0 * recip_v + sub_y; bc->xoff2 = (x0 + r->w) * recip_h + sub_x; bc->yoff2 = (y0 + r->h) * recip_v + sub_y; @@ -15599,7 +15608,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char return return_value; } -STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, int font_size, +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range) { stbtt_pack_range range; @@ -15611,27 +15620,27 @@ STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char * return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1); } -STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, int size, int *ascent, int *descent, int *lineGap) +STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap) { int i_ascent, i_descent, i_lineGap; - int scale; + float scale; stbtt_fontinfo info; stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index)); scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size); stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap); - *ascent = (int) i_ascent * scale; - *descent = (int) i_descent * scale; - *lineGap = (int) i_lineGap * scale; + *ascent = (float) i_ascent * scale; + *descent = (float) i_descent * scale; + *lineGap = (float) i_lineGap * scale; } -STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, int *xpos, int *ypos, stbtt_aligned_quad *q, int align_to_integer) +STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer) { - int ipw = 1 / pw, iph = 1 / ph; + float ipw = 1.0f / pw, iph = 1.0f / ph; const stbtt_packedchar *b = chardata + char_index; if (align_to_integer) { - int x = (int) STBTT_ifloor((*xpos + b->xoff) + 0); - int y = (int) STBTT_ifloor((*ypos + b->yoff) + 0); + float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f); + float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f); q->x0 = x; q->y0 = y; q->x1 = x + b->xoff2 - b->xoff; @@ -15659,25 +15668,25 @@ STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int #define STBTT_min(a,b) ((a) < (b) ? (a) : (b)) #define STBTT_max(a,b) ((a) < (b) ? (b) : (a)) -static int stbtt__ray_intersect_bezier(int orig[2], int ray[2], int q0[2], int q1[2], int q2[2], int hits[2][2]) +static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2]) { - int q0perp = q0[1]*ray[0] - q0[0]*ray[1]; - int q1perp = q1[1]*ray[0] - q1[0]*ray[1]; - int q2perp = q2[1]*ray[0] - q2[0]*ray[1]; - int roperp = orig[1]*ray[0] - orig[0]*ray[1]; + float q0perp = q0[1]*ray[0] - q0[0]*ray[1]; + float q1perp = q1[1]*ray[0] - q1[0]*ray[1]; + float q2perp = q2[1]*ray[0] - q2[0]*ray[1]; + float roperp = orig[1]*ray[0] - orig[0]*ray[1]; - int a = q0perp - 2*q1perp + q2perp; - int b = q1perp - q0perp; - int c = q0perp - roperp; + float a = q0perp - 2*q1perp + q2perp; + float b = q1perp - q0perp; + float c = q0perp - roperp; - int s0 = 0., s1 = 0.; + float s0 = 0., s1 = 0.; int num_s = 0; if (a != 0.0) { - int discr = b*b - a*c; + float discr = b*b - a*c; if (discr > 0.0) { - int rcpna = -1 / a; - int d = (int) STBTT_sqrt(discr); + float rcpna = -1 / a; + float d = (float) STBTT_sqrt(discr); s0 = (b+d) * rcpna; s1 = (b-d) * rcpna; if (s0 >= 0.0 && s0 <= 1.0) @@ -15698,23 +15707,23 @@ static int stbtt__ray_intersect_bezier(int orig[2], int ray[2], int q0[2], int q if (num_s == 0) return 0; else { - int rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]); - int rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2; + float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]); + float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2; - int q0d = q0[0]*rayn_x + q0[1]*rayn_y; - int q1d = q1[0]*rayn_x + q1[1]*rayn_y; - int q2d = q2[0]*rayn_x + q2[1]*rayn_y; - int rod = orig[0]*rayn_x + orig[1]*rayn_y; + float q0d = q0[0]*rayn_x + q0[1]*rayn_y; + float q1d = q1[0]*rayn_x + q1[1]*rayn_y; + float q2d = q2[0]*rayn_x + q2[1]*rayn_y; + float rod = orig[0]*rayn_x + orig[1]*rayn_y; - int q10d = q1d - q0d; - int q20d = q2d - q0d; - int q0rd = q0d - rod; + float q10d = q1d - q0d; + float q20d = q2d - q0d; + float q0rd = q0d - rod; - hits[0][0] = q0rd + s0*(2 - 2*s0)*q10d + s0*s0*q20d; + hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d; hits[0][1] = a*s0+b; if (num_s > 1) { - hits[1][0] = q0rd + s1*(2 - 2*s1)*q10d + s1*s1*q20d; + hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d; hits[1][1] = a*s1+b; return 2; } else { @@ -15723,27 +15732,27 @@ static int stbtt__ray_intersect_bezier(int orig[2], int ray[2], int q0[2], int q } } -static int equal(int *a, int *b) +static int equal(float *a, float *b) { return (a[0] == b[0] && a[1] == b[1]); } -static int stbtt__compute_crossings_x(int x, int y, int nverts, stbtt_vertex *verts) +static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts) { int i; - int orig[2], ray[2] = { 1, 0 }; - int y_frac; + float orig[2], ray[2] = { 1, 0 }; + float y_frac; int winding = 0; orig[0] = x; orig[1] = y; /* make sure y never passes through a vertex of the shape */ - y_frac = (int) STBTT_fmod(y, 1); - if (y_frac < 0) - y += 0; - else if (y_frac > 0) - y -= 0; + y_frac = (float) STBTT_fmod(y, 1.0f); + if (y_frac < 0.01f) + y += 0.01f; + else if (y_frac > 0.99f) + y -= 0.01f; orig[1] = y; /* test a ray from (-infinity,y) to (x,y) */ @@ -15752,7 +15761,7 @@ static int stbtt__compute_crossings_x(int x, int y, int nverts, stbtt_vertex *ve int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y; int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y; if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { - int x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; + float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; if (x_inter < x) winding += (y0 < y1) ? 1 : -1; } @@ -15764,21 +15773,21 @@ static int stbtt__compute_crossings_x(int x, int y, int nverts, stbtt_vertex *ve int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2)); int by = STBTT_max(y0,STBTT_max(y1,y2)); if (y > ay && y < by && x > ax) { - int q0[2],q1[2],q2[2]; - int hits[2][2]; - q0[0] = (int)x0; - q0[1] = (int)y0; - q1[0] = (int)x1; - q1[1] = (int)y1; - q2[0] = (int)x2; - q2[1] = (int)y2; + float q0[2],q1[2],q2[2]; + float hits[2][2]; + q0[0] = (float)x0; + q0[1] = (float)y0; + q1[0] = (float)x1; + q1[1] = (float)y1; + q2[0] = (float)x2; + q2[1] = (float)y2; if (equal(q0,q1) || equal(q1,q2)) { x0 = (int)verts[i-1].x; y0 = (int)verts[i-1].y; x1 = (int)verts[i ].x; y1 = (int)verts[i ].y; if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { - int x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; + float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; if (x_inter < x) winding += (y0 < y1) ? 1 : -1; } @@ -15797,35 +15806,35 @@ static int stbtt__compute_crossings_x(int x, int y, int nverts, stbtt_vertex *ve return winding; } -static int stbtt__cuberoot( int x ) +static float stbtt__cuberoot( float x ) { if (x<0) - return -(int) STBTT_pow(-x,1/3); + return -(float) STBTT_pow(-x,1.0f/3.0f); else - return (int) STBTT_pow( x,1/3); + return (float) STBTT_pow( x,1.0f/3.0f); } /* x^3 + c*x^2 + b*x + a = 0 */ -static int stbtt__solve_cubic(int a, int b, int c, int* r) +static int stbtt__solve_cubic(float a, float b, float c, float* r) { - int s = -a / 3; - int p = b - a*a / 3; - int q = a * (2*a*a - 9*b) / 27 + c; - int p3 = p*p*p; - int d = q*q + 4*p3 / 27; + float s = -a / 3; + float p = b - a*a / 3; + float q = a * (2*a*a - 9*b) / 27 + c; + float p3 = p*p*p; + float d = q*q + 4*p3 / 27; if (d >= 0) { - int z = (int) STBTT_sqrt(d); - int u = (-q + z) / 2; - int v = (-q - z) / 2; + float z = (float) STBTT_sqrt(d); + float u = (-q + z) / 2; + float v = (-q - z) / 2; u = stbtt__cuberoot(u); v = stbtt__cuberoot(v); r[0] = s + u + v; return 1; } else { - int u = (int) STBTT_sqrt(-p/3); - int v = (int) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; /* p3 must be negative, since d is negative */ - int m = (int) STBTT_cos(v); - int n = (int) STBTT_cos(v-3/2)*1; + float u = (float) STBTT_sqrt(-p/3); + float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; /* p3 must be negative, since d is negative */ + float m = (float) STBTT_cos(v); + float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f; r[0] = s + u * 2 * m; r[1] = s - u * (m + n); r[2] = s - u * (m - n); @@ -15837,16 +15846,16 @@ static int stbtt__solve_cubic(int a, int b, int c, int* r) } } -STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, int scale, int glyph, int padding, unsigned char onedge_value, int pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) +STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) { - int scale_x = scale, scale_y = scale; + float scale_x = scale, scale_y = scale; int ix0,iy0,ix1,iy1; int w,h; unsigned char *data; if (scale == 0) return NULL; - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0,0, &ix0,&iy0,&ix1,&iy1); + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1); /* if empty, return NULL */ if (ix0 == ix1 || iy0 == iy1) @@ -15870,134 +15879,134 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, int scal { int x,y,i,j; - int *precompute; + float *precompute; stbtt_vertex *verts; int num_verts = stbtt_GetGlyphShape(info, glyph, &verts); data = (unsigned char *) STBTT_malloc(w * h, info->userdata); - precompute = (int *) STBTT_malloc(num_verts * sizeof(int), info->userdata); + precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata); for (i=0,j=num_verts-1; i < num_verts; j=i++) { if (verts[i].type == STBTT_vline) { - int x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; - int x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y; - int dist = (int) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); - precompute[i] = (dist == 0) ? 0 : 1 / dist; + float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; + float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y; + float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); + precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist; } else if (verts[i].type == STBTT_vcurve) { - int x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y; - int x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y; - int x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y; - int bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; - int len2 = bx*bx + by*by; - if (len2 != 0) - precompute[i] = 1 / (bx*bx + by*by); + float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y; + float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y; + float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y; + float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; + float len2 = bx*bx + by*by; + if (len2 != 0.0f) + precompute[i] = 1.0f / (bx*bx + by*by); else - precompute[i] = 0; + precompute[i] = 0.0f; } else - precompute[i] = 0; + precompute[i] = 0.0f; } for (y=iy0; y < iy1; ++y) { for (x=ix0; x < ix1; ++x) { - int val; - int min_dist = 999999; - int sx = (int) x + 0; - int sy = (int) y + 0; - int x_gspace = (sx / scale_x); - int y_gspace = (sy / scale_y); + float val; + float min_dist = 999999.0f; + float sx = (float) x + 0.5f; + float sy = (float) y + 0.5f; + float x_gspace = (sx / scale_x); + float y_gspace = (sy / scale_y); int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); /* @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path */ for (i=0; i < num_verts; ++i) { - int x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; + float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; /* check against every point here rather than inside line/curve primitives -- @TODO: wrong if multiple 'moves' in a row produce a garbage point, and given culling, probably more efficient to do within line/curve */ - int dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + float dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); if (dist2 < min_dist*min_dist) - min_dist = (int) STBTT_sqrt(dist2); + min_dist = (float) STBTT_sqrt(dist2); if (verts[i].type == STBTT_vline) { - int x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; + float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; /* coarse culling against bbox */ /* if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist && */ /* sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist) */ - int dist = (int) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; + float dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; STBTT_assert(i != 0); if (dist < min_dist) { /* check position along line */ /* x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0) */ /* minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy) */ - int dx = x1-x0, dy = y1-y0; - int px = x0-sx, py = y0-sy; + float dx = x1-x0, dy = y1-y0; + float px = x0-sx, py = y0-sy; /* minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy */ /* derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve */ - int t = -(px*dx + py*dy) / (dx*dx + dy*dy); - if (t >= 0 && t <= 1) + float t = -(px*dx + py*dy) / (dx*dx + dy*dy); + if (t >= 0.0f && t <= 1.0f) min_dist = dist; } } else if (verts[i].type == STBTT_vcurve) { - int x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y; - int x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y; - int box_x0 = STBTT_min(STBTT_min(x0,x1),x2); - int box_y0 = STBTT_min(STBTT_min(y0,y1),y2); - int box_x1 = STBTT_max(STBTT_max(x0,x1),x2); - int box_y1 = STBTT_max(STBTT_max(y0,y1),y2); + float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y; + float x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y; + float box_x0 = STBTT_min(STBTT_min(x0,x1),x2); + float box_y0 = STBTT_min(STBTT_min(y0,y1),y2); + float box_x1 = STBTT_max(STBTT_max(x0,x1),x2); + float box_y1 = STBTT_max(STBTT_max(y0,y1),y2); /* coarse culling against bbox to avoid computing cubic unnecessarily */ if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) { int num=0; - int ax = x1-x0, ay = y1-y0; - int bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; - int mx = x0 - sx, my = y0 - sy; - int res[3],px,py,t,it; - int a_inv = precompute[i]; + float ax = x1-x0, ay = y1-y0; + float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; + float mx = x0 - sx, my = y0 - sy; + float res[3],px,py,t,it; + float a_inv = precompute[i]; if (a_inv == 0.0) { /* if a_inv is 0, it's 2nd degree so use quadratic formula */ - int a = 3*(ax*bx + ay*by); - int b = 2*(ax*ax + ay*ay) + (mx*bx+my*by); - int c = mx*ax+my*ay; + float a = 3*(ax*bx + ay*by); + float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by); + float c = mx*ax+my*ay; if (a == 0.0) { /* if a is 0, it's linear */ if (b != 0.0) { res[num++] = -c/b; } } else { - int discriminant = b*b - 4*a*c; + float discriminant = b*b - 4*a*c; if (discriminant < 0) num = 0; else { - int root = (int) STBTT_sqrt(discriminant); + float root = (float) STBTT_sqrt(discriminant); res[0] = (-b - root)/(2*a); res[1] = (-b + root)/(2*a); num = 2; /* don't bother distinguishing 1-solution case, as code below will still work */ } } } else { - int b = 3*(ax*bx + ay*by) * a_inv; /* could precompute this as it doesn't depend on sample point */ - int c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv; - int d = (mx*ax+my*ay) * a_inv; + float b = 3*(ax*bx + ay*by) * a_inv; /* could precompute this as it doesn't depend on sample point */ + float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv; + float d = (mx*ax+my*ay) * a_inv; num = stbtt__solve_cubic(b, c, d, res); } - if (num >= 1 && res[0] >= 0 && res[0] <= 1) { - t = res[0], it = 1 - t; + if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) { + t = res[0], it = 1.0f - t; px = it*it*x0 + 2*t*it*x1 + t*t*x2; py = it*it*y0 + 2*t*it*y1 + t*t*y2; dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); if (dist2 < min_dist * min_dist) - min_dist = (int) STBTT_sqrt(dist2); + min_dist = (float) STBTT_sqrt(dist2); } - if (num >= 2 && res[1] >= 0 && res[1] <= 1) { - t = res[1], it = 1 - t; + if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) { + t = res[1], it = 1.0f - t; px = it*it*x0 + 2*t*it*x1 + t*t*x2; py = it*it*y0 + 2*t*it*y1 + t*t*y2; dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); if (dist2 < min_dist * min_dist) - min_dist = (int) STBTT_sqrt(dist2); + min_dist = (float) STBTT_sqrt(dist2); } - if (num >= 3 && res[2] >= 0 && res[2] <= 1) { - t = res[2], it = 1 - t; + if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) { + t = res[2], it = 1.0f - t; px = it*it*x0 + 2*t*it*x1 + t*t*x2; py = it*it*y0 + 2*t*it*y1 + t*t*y2; dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); if (dist2 < min_dist * min_dist) - min_dist = (int) STBTT_sqrt(dist2); + min_dist = (float) STBTT_sqrt(dist2); } } } @@ -16018,7 +16027,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, int scal return data; } -STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, int scale, int codepoint, int padding, unsigned char onedge_value, int pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) +STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) { return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff); } @@ -16194,7 +16203,7 @@ static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char #endif STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, - int pixel_height, unsigned char *pixels, int pw, int ph, + float pixel_height, unsigned char *pixels, int pw, int ph, int first_char, int num_chars, stbtt_bakedchar *chardata) { return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata); @@ -16656,7 +16665,7 @@ nk_font_bake(struct nk_font_baker *baker, void *image_memory, int width, int hei struct nk_font_bake_data *tmp = &baker->build[input_i++]; struct nk_baked_font *dst_font = cfg->font; - int font_scale = stbtt_ScaleForPixelHeight(&tmp->info, cfg->size); + float font_scale = stbtt_ScaleForPixelHeight(&tmp->info, cfg->size); int unscaled_ascent, unscaled_descent, unscaled_line_gap; stbtt_GetFontVMetrics(&tmp->info, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap); @@ -16665,8 +16674,8 @@ nk_font_bake(struct nk_font_baker *baker, void *image_memory, int width, int hei if (!cfg->merge_mode) { dst_font->ranges = cfg->range; dst_font->height = cfg->size; - dst_font->ascent = ((int)unscaled_ascent * font_scale); - dst_font->descent = ((int)unscaled_descent * font_scale); + dst_font->ascent = ((float)unscaled_ascent * font_scale); + dst_font->descent = ((float)unscaled_descent * font_scale); dst_font->glyph_offset = glyph_n; /* Need to zero this, or it will carry over from a previous @@ -16681,7 +16690,7 @@ nk_font_bake(struct nk_font_baker *baker, void *image_memory, int width, int hei for (char_idx = 0; char_idx < range->num_chars; char_idx++) { nk_rune codepoint = 0; - int dummy_x = 0, dummy_y = 0; + float dummy_x = 0, dummy_y = 0; stbtt_aligned_quad q; struct nk_font_glyph *glyph; @@ -16697,16 +16706,16 @@ nk_font_bake(struct nk_font_baker *baker, void *image_memory, int width, int hei glyph->codepoint = codepoint; glyph->x0 = q.x0; glyph->y0 = q.y0; glyph->x1 = q.x1; glyph->y1 = q.y1; - glyph->y0 += (dst_font->ascent + 0); - glyph->y1 += (dst_font->ascent + 0); - glyph->w = glyph->x1 - glyph->x0 + 0; + glyph->y0 += (dst_font->ascent + 0.5f); + glyph->y1 += (dst_font->ascent + 0.5f); + glyph->w = glyph->x1 - glyph->x0 + 0.5f; glyph->h = glyph->y1 - glyph->y0; if (cfg->coord_type == NK_COORD_PIXEL) { - glyph->u0 = q.s0 * (int)width; - glyph->v0 = q.t0 * (int)height; - glyph->u1 = q.s1 * (int)width; - glyph->v1 = q.t1 * (int)height; + glyph->u0 = q.s0 * (float)width; + glyph->v0 = q.t0 * (float)height; + glyph->u1 = q.s1 * (float)width; + glyph->v1 = q.t1 * (float)height; } else { glyph->u0 = q.s0; glyph->v0 = q.t0; @@ -16715,7 +16724,7 @@ nk_font_bake(struct nk_font_baker *baker, void *image_memory, int width, int hei } glyph->xadvance = (pc->xadvance + cfg->spacing.x); if (cfg->pixel_snap) - glyph->xadvance = (int)(int)(glyph->xadvance + 0); + glyph->xadvance = (float)(int)(glyph->xadvance + 0.5f); glyph_count++; } } @@ -16777,14 +16786,14 @@ nk_font_bake_convert(void *out_memory, int img_width, int img_height, * FONT * * --------------------------------------------------------------*/ -NK_INTERN int -nk_font_text_width(nk_handle handle, int height, const char *text, int len) +NK_INTERN float +nk_font_text_width(nk_handle handle, float height, const char *text, int len) { nk_rune unicode; int text_len = 0; - int text_width = 0; + float text_width = 0; int glyph_len = 0; - int scale = 0; + float scale = 0; struct nk_font *font = (struct nk_font*)handle.ptr; NK_ASSERT(font); @@ -16811,10 +16820,10 @@ nk_font_text_width(nk_handle handle, int height, const char *text, int len) } #ifdef NK_INCLUDE_VERTEX_BUFFER_OUTPUT NK_INTERN void -nk_font_query_font_glyph(nk_handle handle, int height, +nk_font_query_font_glyph(nk_handle handle, float height, struct nk_user_font_glyph *glyph, nk_rune codepoint, nk_rune next_codepoint) { - int scale; + float scale; const struct nk_font_glyph *g; struct nk_font *font; @@ -16866,7 +16875,7 @@ nk_font_find_glyph(struct nk_font *font, nk_rune unicode) return glyph; } NK_INTERN void -nk_font_init(struct nk_font *font, int pixel_height, +nk_font_init(struct nk_font *font, float pixel_height, nk_rune fallback_codepoint, struct nk_font_glyph *glyphs, const struct nk_baked_font *baked_font, nk_handle atlas) { @@ -16880,7 +16889,7 @@ nk_font_init(struct nk_font *font, int pixel_height, baked = *baked_font; font->fallback = 0; font->info = baked; - font->scale = (int)pixel_height / (int)font->info.height; + font->scale = (float)pixel_height / (float)font->info.height; font->glyphs = &glyphs[baked_font->glyph_offset]; font->texture = atlas; font->fallback_codepoint = fallback_codepoint; @@ -17191,7 +17200,7 @@ nk_decode_85(unsigned char* dst, const unsigned char* src) * * --------------------------------------------------------------*/ NK_API struct nk_font_config -nk_font_config(int pixel_height) +nk_font_config(float pixel_height) { struct nk_font_config cfg; nk_zero_struct(cfg); @@ -17280,9 +17289,9 @@ nk_font_atlas_add(struct nk_font_atlas *atlas, const struct nk_font_config *conf NK_ASSERT(config); NK_ASSERT(config->ttf_blob); NK_ASSERT(config->ttf_size); - NK_ASSERT(config->size > 0); + NK_ASSERT(config->size > 0.0f); - if (!atlas || !config || !config->ttf_blob || !config->ttf_size || config->size <= 0|| + if (!atlas || !config || !config->ttf_blob || !config->ttf_size || config->size <= 0.0f|| !atlas->permanent.alloc || !atlas->permanent.free || !atlas->temporary.alloc || !atlas->temporary.free) return 0; @@ -17354,7 +17363,7 @@ nk_font_atlas_add(struct nk_font_atlas *atlas, const struct nk_font_config *conf } NK_API struct nk_font* nk_font_atlas_add_from_memory(struct nk_font_atlas *atlas, void *memory, - nk_size size, int height, const struct nk_font_config *config) + nk_size size, float height, const struct nk_font_config *config) { struct nk_font_config cfg; NK_ASSERT(memory); @@ -17379,7 +17388,7 @@ nk_font_atlas_add_from_memory(struct nk_font_atlas *atlas, void *memory, #ifdef NK_INCLUDE_STANDARD_IO NK_API struct nk_font* nk_font_atlas_add_from_file(struct nk_font_atlas *atlas, const char *file_path, - int height, const struct nk_font_config *config) + float height, const struct nk_font_config *config) { nk_size size; char *memory; @@ -17405,7 +17414,7 @@ nk_font_atlas_add_from_file(struct nk_font_atlas *atlas, const char *file_path, #endif NK_API struct nk_font* nk_font_atlas_add_compressed(struct nk_font_atlas *atlas, - void *compressed_data, nk_size compressed_size, int height, + void *compressed_data, nk_size compressed_size, float height, const struct nk_font_config *config) { unsigned int decompressed_size; @@ -17440,7 +17449,7 @@ nk_font_atlas_add_compressed(struct nk_font_atlas *atlas, } NK_API struct nk_font* nk_font_atlas_add_compressed_base85(struct nk_font_atlas *atlas, - const char *data_base85, int height, const struct nk_font_config *config) + const char *data_base85, float height, const struct nk_font_config *config) { int compressed_size; void *compressed_data; @@ -17471,7 +17480,7 @@ nk_font_atlas_add_compressed_base85(struct nk_font_atlas *atlas, #ifdef NK_INCLUDE_DEFAULT_FONT NK_API struct nk_font* nk_font_atlas_add_default(struct nk_font_atlas *atlas, - int pixel_height, const struct nk_font_config *config) + float pixel_height, const struct nk_font_config *config) { NK_ASSERT(atlas); NK_ASSERT(atlas->temporary.alloc); @@ -17508,7 +17517,7 @@ nk_font_atlas_bake(struct nk_font_atlas *atlas, int *width, int *height, #ifdef NK_INCLUDE_DEFAULT_FONT /* no font added so just use default font */ if (!atlas->font_num) - atlas->default_font = nk_font_atlas_add_default(atlas, 13, 0); + atlas->default_font = nk_font_atlas_add_default(atlas, 13.0f, 0); #endif NK_ASSERT(atlas->font_num); if (!atlas->font_num) return 0; @@ -17617,12 +17626,12 @@ nk_font_atlas_end(struct nk_font_atlas *atlas, nk_handle texture, if (!atlas) { if (!null) return; null->texture = texture; - null->uv = nk_vec2(0,0); + null->uv = nk_vec2(0.5f,0.5f); } if (null) { null->texture = texture; - null->uv.x = (atlas->custom.x + 0)/(int)atlas->tex_width; - null->uv.y = (atlas->custom.y + 0)/(int)atlas->tex_height; + null->uv.x = (atlas->custom.x + 0.5f)/(float)atlas->tex_width; + null->uv.y = (atlas->custom.y + 0.5f)/(float)atlas->tex_height; } for (font_iter = atlas->fonts; font_iter; font_iter = font_iter->next) { font_iter->texture = texture; @@ -17756,8 +17765,8 @@ nk_input_motion(struct nk_context *ctx, int x, int y) NK_ASSERT(ctx); if (!ctx) return; in = &ctx->input; - in->mouse.pos.x = (int)x; - in->mouse.pos.y = (int)y; + in->mouse.pos.x = (float)x; + in->mouse.pos.y = (float)y; in->mouse.delta.x = in->mouse.pos.x - in->mouse.prev.x; in->mouse.delta.y = in->mouse.pos.y - in->mouse.prev.y; } @@ -17787,8 +17796,8 @@ nk_input_button(struct nk_context *ctx, enum nk_buttons id, int x, int y, nk_boo if (in->mouse.buttons[id].down == down) return; btn = &in->mouse.buttons[id]; - btn->clicked_pos.x = (int)x; - btn->clicked_pos.y = (int)y; + btn->clicked_pos.x = (float)x; + btn->clicked_pos.y = (float)y; btn->down = down; btn->clicked++; } @@ -18091,13 +18100,13 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(2,2); - button->image_padding = nk_vec2(0,0); - button->touch_padding = nk_vec2(0, 0); + button->padding = nk_vec2(2.0f,2.0f); + button->image_padding = nk_vec2(0.0f,0.0f); + button->touch_padding = nk_vec2(0.0f, 0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 1; - button->rounding = 4; + button->border = 1.0f; + button->rounding = 4.0f; button->draw_begin = 0; button->draw_end = 0; @@ -18112,12 +18121,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(2,2); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(2.0f,2.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; @@ -18132,12 +18141,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(2,2); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(2.0f,2.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 1; + button->border = 0.0f; + button->rounding = 1.0f; button->draw_begin = 0; button->draw_end = 0; @@ -18154,10 +18163,10 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) toggle->text_normal = table[NK_COLOR_TEXT]; toggle->text_hover = table[NK_COLOR_TEXT]; toggle->text_active = table[NK_COLOR_TEXT]; - toggle->padding = nk_vec2(2, 2); + toggle->padding = nk_vec2(2.0f, 2.0f); toggle->touch_padding = nk_vec2(0,0); toggle->border_color = nk_rgba(0,0,0,0); - toggle->border = 0; + toggle->border = 0.0f; toggle->spacing = 4; /* option toggle */ @@ -18173,10 +18182,10 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) toggle->text_normal = table[NK_COLOR_TEXT]; toggle->text_hover = table[NK_COLOR_TEXT]; toggle->text_active = table[NK_COLOR_TEXT]; - toggle->padding = nk_vec2(3, 3); + toggle->padding = nk_vec2(3.0f, 3.0f); toggle->touch_padding = nk_vec2(0,0); toggle->border_color = nk_rgba(0,0,0,0); - toggle->border = 0; + toggle->border = 0.0f; toggle->spacing = 4; /* selectable */ @@ -18194,11 +18203,11 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) select->text_normal_active = table[NK_COLOR_TEXT]; select->text_hover_active = table[NK_COLOR_TEXT]; select->text_pressed_active = table[NK_COLOR_TEXT]; - select->padding = nk_vec2(2,2); - select->image_padding = nk_vec2(2,2); + select->padding = nk_vec2(2.0f,2.0f); + select->image_padding = nk_vec2(2.0f,2.0f); select->touch_padding = nk_vec2(0,0); select->userdata = nk_handle_ptr(0); - select->rounding = 0; + select->rounding = 0.0f; select->draw_begin = 0; select->draw_end = 0; @@ -18237,12 +18246,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = nk_rgb(175,175,175); button->text_hover = nk_rgb(175,175,175); button->text_active = nk_rgb(175,175,175); - button->padding = nk_vec2(8,8); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(8.0f,8.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 1; - button->rounding = 0; + button->border = 1.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; style->slider.dec_button = style->slider.inc_button; @@ -18301,12 +18310,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = nk_rgb(175,175,175); button->text_hover = nk_rgb(175,175,175); button->text_active = nk_rgb(175,175,175); - button->padding = nk_vec2(4,4); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(4.0f,4.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 1; - button->rounding = 0; + button->border = 1.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; style->scrollh.dec_button = style->scrollh.inc_button; @@ -18369,12 +18378,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(0,0); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(0.0f,0.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; style->property.inc_button = style->property.dec_button; @@ -18442,12 +18451,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(2,2); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(2.0f,2.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; @@ -18460,7 +18469,7 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) tab->sym_maximize = NK_SYMBOL_TRIANGLE_DOWN; tab->padding = nk_vec2(4,4); tab->spacing = nk_vec2(4,4); - tab->indent = 10; + tab->indent = 10.0f; tab->border = 1; tab->rounding = 0; @@ -18475,12 +18484,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(2,2); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(2.0f,2.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; style->tab.tab_maximize_button =*button; @@ -18496,12 +18505,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(2,2); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(2.0f,2.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; style->tab.node_maximize_button =*button; @@ -18533,12 +18542,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(0,0); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(0.0f,0.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; @@ -18553,12 +18562,12 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) button->text_normal = table[NK_COLOR_TEXT]; button->text_hover = table[NK_COLOR_TEXT]; button->text_active = table[NK_COLOR_TEXT]; - button->padding = nk_vec2(0,0); - button->touch_padding = nk_vec2(0,0); + button->padding = nk_vec2(0.0f,0.0f); + button->touch_padding = nk_vec2(0.0f,0.0f); button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_CENTERED; - button->border = 0; - button->rounding = 0; + button->border = 0.0f; + button->rounding = 0.0f; button->draw_begin = 0; button->draw_end = 0; @@ -18574,18 +18583,18 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table) win->tooltip_border_color = table[NK_COLOR_BORDER]; win->scaler = nk_style_item_color(table[NK_COLOR_TEXT]); - win->rounding = 0; + win->rounding = 0.0f; win->spacing = nk_vec2(4,4); win->scrollbar_size = nk_vec2(10,10); win->min_size = nk_vec2(64,64); - win->combo_border = 1; - win->contextual_border = 1; - win->menu_border = 1; - win->group_border = 1; - win->tooltip_border = 1; - win->popup_border = 1; - win->border = 2; + win->combo_border = 1.0f; + win->contextual_border = 1.0f; + win->menu_border = 1.0f; + win->group_border = 1.0f; + win->tooltip_border = 1.0f; + win->popup_border = 1.0f; + win->border = 2.0f; win->min_row_height_padding = 8; win->padding = nk_vec2(4,4); @@ -18680,13 +18689,13 @@ nk_style_pop_##type(struct nk_context *ctx)\ return 1;\ } NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(struct nk, style_item, style_items) -NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(nk,int, ints) +NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(nk,float, floats) NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(struct nk, vec2, vectors) NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(nk,flags, flags) NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(struct nk,color, colors) NK_API nk_bool NK_STYLE_POP_IMPLEMENATION(style_item, style_items) -NK_API nk_bool NK_STYLE_POP_IMPLEMENATION(int,ints) +NK_API nk_bool NK_STYLE_POP_IMPLEMENATION(float,floats) NK_API nk_bool NK_STYLE_POP_IMPLEMENATION(vec2, vectors) NK_API nk_bool NK_STYLE_POP_IMPLEMENATION(flags,flags) NK_API nk_bool NK_STYLE_POP_IMPLEMENATION(color,colors) @@ -19350,7 +19359,7 @@ nk_panel_get_padding(const struct nk_style *style, enum nk_panel_type type) case NK_PANEL_MENU: return style->window.menu_padding; case NK_PANEL_TOOLTIP: return style->window.menu_padding;} } -NK_LIB int +NK_LIB float nk_panel_get_border(const struct nk_style *style, nk_flags flags, enum nk_panel_type type) { @@ -19438,8 +19447,8 @@ nk_panel_begin(struct nk_context *ctx, const char *title, enum nk_panel_type pan header.y = win->bounds.y; header.w = win->bounds.w; if (nk_panel_has_header(win->flags, title)) { - header.h = font->height + 2 * style->window.header.padding.y; - header.h += 2 * style->window.header.label_padding.y; + header.h = font->height + 2.0f * style->window.header.padding.y; + header.h += 2.0f * style->window.header.label_padding.y; } else header.h = panel_padding.y; /* window movement by dragging */ @@ -19499,8 +19508,8 @@ nk_panel_begin(struct nk_context *ctx, const char *title, enum nk_panel_type pan header.x = win->bounds.x; header.y = win->bounds.y; header.w = win->bounds.w; - header.h = font->height + 2 * style->window.header.padding.y; - header.h += (2 * style->window.header.label_padding.y); + header.h = font->height + 2.0f * style->window.header.padding.y; + header.h += (2.0f * style->window.header.label_padding.y); /* shrink panel by header */ layout->header_height = header.h; @@ -19521,7 +19530,7 @@ nk_panel_begin(struct nk_context *ctx, const char *title, enum nk_panel_type pan } /* draw header background */ - header.h += 1; + header.h += 1.0f; switch(background->type) { case NK_STYLE_ITEM_IMAGE: @@ -19587,7 +19596,7 @@ nk_panel_begin(struct nk_context *ctx, const char *title, enum nk_panel_type pan {/* window header title */ int text_len = nk_strlen(title); struct nk_rect label = {0,0,0,0}; - int t = font->width(font->userdata, font->height, title, text_len); + float t = font->width(font->userdata, font->height, title, text_len); text.padding = nk_vec2(0,0); label.x = header.x + style->window.header.padding.x; @@ -19710,10 +19719,10 @@ nk_panel_end(struct nk_context *ctx) { struct nk_rect scroll; int scroll_has_scrolling; - int scroll_target; - int scroll_offset; - int scroll_step; - int scroll_inc; + float scroll_target; + float scroll_offset; + float scroll_step; + float scroll_inc; /* mouse wheel scrolling */ if (nk_panel_is_sub(layout->type)) @@ -19760,10 +19769,10 @@ nk_panel_end(struct nk_context *ctx) scroll.w = scrollbar_size.x; scroll.h = layout->bounds.h; - scroll_offset = (int)*layout->offset_y; - scroll_step = scroll.h * 0; - scroll_inc = scroll.h * 0; - scroll_target = (int)(int)(layout->at_y - scroll.y); + scroll_offset = (float)*layout->offset_y; + scroll_step = scroll.h * 0.10f; + scroll_inc = scroll.h * 0.01f; + scroll_target = (float)(int)(layout->at_y - scroll.y); scroll_offset = nk_do_scrollbarv(&state, out, scroll, scroll_has_scrolling, scroll_offset, scroll_target, scroll_step, scroll_inc, &ctx->style.scrollv, in, style->font); @@ -19779,10 +19788,10 @@ nk_panel_end(struct nk_context *ctx) scroll.w = layout->bounds.w; scroll.h = scrollbar_size.y; - scroll_offset = (int)*layout->offset_x; - scroll_target = (int)(int)(layout->max_x - scroll.x); - scroll_step = layout->max_x * 0; - scroll_inc = layout->max_x * 0; + scroll_offset = (float)*layout->offset_x; + scroll_target = (float)(int)(layout->max_x - scroll.x); + scroll_step = layout->max_x * 0.05f; + scroll_inc = layout->max_x * 0.005f; scroll_offset = nk_do_scrollbarh(&state, out, scroll, scroll_has_scrolling, scroll_offset, scroll_target, scroll_step, scroll_inc, &ctx->style.scrollh, in, style->font); @@ -19804,7 +19813,7 @@ nk_panel_end(struct nk_context *ctx) if (layout->flags & NK_WINDOW_BORDER) { struct nk_color border_color = nk_panel_get_border_color(style, layout->type); - const int padding_y = (layout->flags & NK_WINDOW_MINIMIZED) + const float padding_y = (layout->flags & NK_WINDOW_MINIMIZED) ? (style->window.border + window->bounds.y + layout->header_height) : ((layout->flags & NK_WINDOW_DYNAMIC) ? (layout->bounds.y + layout->bounds.h + layout->footer_height) @@ -19823,7 +19832,7 @@ nk_panel_end(struct nk_context *ctx) scaler.h = scrollbar_size.y; scaler.y = layout->bounds.y + layout->bounds.h; if (layout->flags & NK_WINDOW_SCALE_LEFT) - scaler.x = layout->bounds.x - panel_padding.x * 0; + scaler.x = layout->bounds.x - panel_padding.x * 0.5f; else scaler.x = layout->bounds.x + layout->bounds.w + panel_padding.x; if (layout->flags & NK_WINDOW_NO_SCROLLBAR) scaler.x -= scaler.w; @@ -19851,7 +19860,7 @@ nk_panel_end(struct nk_context *ctx) NK_BUTTON_LEFT, scaler, nk_true); if (left_mouse_down && left_mouse_click_in_scaler) { - int delta_x = in->mouse.delta.x; + float delta_x = in->mouse.delta.x; if (layout->flags & NK_WINDOW_SCALE_LEFT) { delta_x = -delta_x; window->bounds.x += in->mouse.delta.x; @@ -19873,8 +19882,8 @@ nk_panel_end(struct nk_context *ctx) } } ctx->style.cursor_active = ctx->style.cursors[NK_CURSOR_RESIZE_TOP_RIGHT_DOWN_LEFT]; - in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.x = scaler.x + scaler.w/2; - in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.y = scaler.y + scaler.h/2; + in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.x = scaler.x + scaler.w/2.0f; + in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.y = scaler.y + scaler.h/2.0f; } } } @@ -20141,8 +20150,8 @@ nk_begin_titled(struct nk_context *ctx, const char *name, const char *title, { int inpanel, ishovered; struct nk_window *iter = win; - int h = ctx->style.font->height + 2 * style->window.header.padding.y + - (2 * style->window.header.label_padding.y); + float h = ctx->style.font->height + 2.0f * style->window.header.padding.y + + (2.0f * style->window.header.label_padding.y); struct nk_rect win_bounds = (!(win->flags & NK_WINDOW_MINIMIZED))? win->bounds: nk_rect(win->bounds.x, win->bounds.y, win->bounds.w, h); @@ -20262,7 +20271,7 @@ nk_window_get_size(const struct nk_context *ctx) if (!ctx || !ctx->current) return nk_vec2(0,0); return nk_vec2(ctx->current->bounds.w, ctx->current->bounds.h); } -NK_API int +NK_API float nk_window_get_width(const struct nk_context *ctx) { NK_ASSERT(ctx); @@ -20270,7 +20279,7 @@ nk_window_get_width(const struct nk_context *ctx) if (!ctx || !ctx->current) return 0; return ctx->current->bounds.w; } -NK_API int +NK_API float nk_window_get_height(const struct nk_context *ctx) { NK_ASSERT(ctx); @@ -21386,7 +21395,7 @@ nk_menu_end(struct nk_context *ctx) * * ===============================================================*/ NK_API void -nk_layout_set_min_row_height(struct nk_context *ctx, int height) +nk_layout_set_min_row_height(struct nk_context *ctx, float height) { struct nk_window *win; struct nk_panel *layout; @@ -21419,12 +21428,12 @@ nk_layout_reset_min_row_height(struct nk_context *ctx) layout->row.min_height += ctx->style.text.padding.y*2; layout->row.min_height += ctx->style.window.min_row_height_padding*2; } -NK_LIB int +NK_LIB float nk_layout_row_calculate_usable_space(const struct nk_style *style, enum nk_panel_type type, - int total_space, int columns) + float total_space, int columns) { - int panel_spacing; - int panel_space; + float panel_spacing; + float panel_space; struct nk_vec2 spacing; @@ -21433,13 +21442,13 @@ nk_layout_row_calculate_usable_space(const struct nk_style *style, enum nk_panel spacing = style->window.spacing; /* calculate the usable panel space */ - panel_spacing = (int)NK_MAX(columns - 1, 0) * spacing.x; + panel_spacing = (float)NK_MAX(columns - 1, 0) * spacing.x; panel_space = total_space - panel_spacing; return panel_space; } NK_LIB void nk_panel_layout(const struct nk_context *ctx, struct nk_window *win, - int height, int cols) + float height, int cols) { struct nk_panel *layout; const struct nk_style *style; @@ -21474,7 +21483,7 @@ nk_panel_layout(const struct nk_context *ctx, struct nk_window *win, layout->row.index = 0; layout->at_y += layout->row.height; layout->row.columns = cols; - if (height == 0) + if (height == 0.0f) layout->row.height = NK_MAX(height, layout->row.min_height) + item_spacing.y; else layout->row.height = height + item_spacing.y; @@ -21484,14 +21493,14 @@ nk_panel_layout(const struct nk_context *ctx, struct nk_window *win, struct nk_rect background; background.x = win->bounds.x; background.w = win->bounds.w; - background.y = layout->at_y - 1; - background.h = layout->row.height + 1; + background.y = layout->at_y - 1.0f; + background.h = layout->row.height + 1.0f; nk_fill_rect(out, background, 0, color); } } NK_LIB void nk_row_layout(struct nk_context *ctx, enum nk_layout_format fmt, - int height, int cols, int width) + float height, int cols, int width) { /* update the current row and set the current row layout */ struct nk_window *win; @@ -21510,31 +21519,31 @@ nk_row_layout(struct nk_context *ctx, enum nk_layout_format fmt, win->layout->row.ratio = 0; win->layout->row.filled = 0; win->layout->row.item_offset = 0; - win->layout->row.item_width = (int)width; + win->layout->row.item_width = (float)width; } -NK_API int -nk_layout_ratio_from_pixel(struct nk_context *ctx, int pixel_width) +NK_API float +nk_layout_ratio_from_pixel(struct nk_context *ctx, float pixel_width) { struct nk_window *win; NK_ASSERT(ctx); NK_ASSERT(pixel_width); if (!ctx || !ctx->current || !ctx->current->layout) return 0; win = ctx->current; - return NK_CLAMP(0, pixel_width/win->bounds.x, 1); + return NK_CLAMP(0.0f, pixel_width/win->bounds.x, 1.0f); } NK_API void -nk_layout_row_dynamic(struct nk_context *ctx, int height, int cols) +nk_layout_row_dynamic(struct nk_context *ctx, float height, int cols) { nk_row_layout(ctx, NK_DYNAMIC, height, cols, 0); } NK_API void -nk_layout_row_static(struct nk_context *ctx, int height, int item_width, int cols) +nk_layout_row_static(struct nk_context *ctx, float height, int item_width, int cols) { nk_row_layout(ctx, NK_STATIC, height, cols, item_width); } NK_API void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, - int row_height, int cols) + float row_height, int cols) { struct nk_window *win; struct nk_panel *layout; @@ -21559,7 +21568,7 @@ nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, layout->row.columns = cols; } NK_API void -nk_layout_row_push(struct nk_context *ctx, int ratio_or_width) +nk_layout_row_push(struct nk_context *ctx, float ratio_or_width) { struct nk_window *win; struct nk_panel *layout; @@ -21577,11 +21586,11 @@ nk_layout_row_push(struct nk_context *ctx, int ratio_or_width) return; if (layout->row.type == NK_LAYOUT_DYNAMIC_ROW) { - int ratio = ratio_or_width; - if ((ratio + layout->row.filled) > 1) return; - if (ratio > 0) + float ratio = ratio_or_width; + if ((ratio + layout->row.filled) > 1.0f) return; + if (ratio > 0.0f) layout->row.item_width = NK_SATURATE(ratio); - else layout->row.item_width = 1 - layout->row.filled; + else layout->row.item_width = 1.0f - layout->row.filled; } else layout->row.item_width = ratio_or_width; } NK_API void @@ -21606,7 +21615,7 @@ nk_layout_row_end(struct nk_context *ctx) } NK_API void nk_layout_row(struct nk_context *ctx, enum nk_layout_format fmt, - int height, int cols, const int *ratio) + float height, int cols, const float *ratio) { int i; int n_undef = 0; @@ -21624,16 +21633,16 @@ nk_layout_row(struct nk_context *ctx, enum nk_layout_format fmt, nk_panel_layout(ctx, win, height, cols); if (fmt == NK_DYNAMIC) { /* calculate width of undefined widget ratios */ - int r = 0; + float r = 0; layout->row.ratio = ratio; for (i = 0; i < cols; ++i) { - if (ratio[i] < 0) + if (ratio[i] < 0.0f) n_undef++; else r += ratio[i]; } - r = NK_SATURATE(1 - r); + r = NK_SATURATE(1.0f - r); layout->row.type = NK_LAYOUT_DYNAMIC; - layout->row.item_width = (r > 0 && n_undef > 0) ? (r / (int)n_undef):0; + layout->row.item_width = (r > 0 && n_undef > 0) ? (r / (float)n_undef):0; } else { layout->row.ratio = ratio; layout->row.type = NK_LAYOUT_STATIC; @@ -21644,7 +21653,7 @@ nk_layout_row(struct nk_context *ctx, enum nk_layout_format fmt, layout->row.filled = 0; } NK_API void -nk_layout_row_template_begin(struct nk_context *ctx, int height) +nk_layout_row_template_begin(struct nk_context *ctx, float height) { struct nk_window *win; struct nk_panel *layout; @@ -21688,10 +21697,10 @@ nk_layout_row_template_push_dynamic(struct nk_context *ctx) NK_ASSERT(layout->row.columns < NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS); if (layout->row.type != NK_LAYOUT_TEMPLATE) return; if (layout->row.columns >= NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS) return; - layout->row.templates[layout->row.columns++] = -1; + layout->row.templates[layout->row.columns++] = -1.0f; } NK_API void -nk_layout_row_template_push_variable(struct nk_context *ctx, int min_width) +nk_layout_row_template_push_variable(struct nk_context *ctx, float min_width) { struct nk_window *win; struct nk_panel *layout; @@ -21711,7 +21720,7 @@ nk_layout_row_template_push_variable(struct nk_context *ctx, int min_width) layout->row.templates[layout->row.columns++] = -min_width; } NK_API void -nk_layout_row_template_push_static(struct nk_context *ctx, int width) +nk_layout_row_template_push_static(struct nk_context *ctx, float width) { struct nk_window *win; struct nk_panel *layout; @@ -21739,9 +21748,9 @@ nk_layout_row_template_end(struct nk_context *ctx) int i = 0; int variable_count = 0; int min_variable_count = 0; - int min_fixed_width = 0; - int total_fixed_width = 0; - int max_variable_width = 0; + float min_fixed_width = 0.0f; + float total_fixed_width = 0.0f; + float max_variable_width = 0.0f; NK_ASSERT(ctx); NK_ASSERT(ctx->current); @@ -21754,11 +21763,11 @@ nk_layout_row_template_end(struct nk_context *ctx) NK_ASSERT(layout->row.type == NK_LAYOUT_TEMPLATE); if (layout->row.type != NK_LAYOUT_TEMPLATE) return; for (i = 0; i < layout->row.columns; ++i) { - int width = layout->row.templates[i]; - if (width >= 0) { + float width = layout->row.templates[i]; + if (width >= 0.0f) { total_fixed_width += width; min_fixed_width += width; - } else if (width < -1) { + } else if (width < -1.0f) { width = -width; total_fixed_width += width; max_variable_width = NK_MAX(max_variable_width, width); @@ -21769,21 +21778,21 @@ nk_layout_row_template_end(struct nk_context *ctx) } } if (variable_count) { - int space = nk_layout_row_calculate_usable_space(&ctx->style, layout->type, + float space = nk_layout_row_calculate_usable_space(&ctx->style, layout->type, layout->bounds.w, layout->row.columns); - int var_width = (NK_MAX(space-min_fixed_width,0)) / (int)variable_count; + float var_width = (NK_MAX(space-min_fixed_width,0.0f)) / (float)variable_count; int enough_space = var_width >= max_variable_width; if (!enough_space) - var_width = (NK_MAX(space-total_fixed_width,0)) / (int)min_variable_count; + var_width = (NK_MAX(space-total_fixed_width,0)) / (float)min_variable_count; for (i = 0; i < layout->row.columns; ++i) { - int *width = &layout->row.templates[i]; - *width = (*width >= 0)? *width: (*width < -1 && !enough_space)? -(*width): var_width; + float *width = &layout->row.templates[i]; + *width = (*width >= 0.0f)? *width: (*width < -1.0f && !enough_space)? -(*width): var_width; } } } NK_API void nk_layout_space_begin(struct nk_context *ctx, enum nk_layout_format fmt, - int height, int widget_count) + float height, int widget_count) { struct nk_window *win; struct nk_panel *layout; @@ -21891,8 +21900,8 @@ nk_layout_space_to_screen(struct nk_context *ctx, struct nk_vec2 ret) win = ctx->current; layout = win->layout; - ret.x += layout->at_x - (int)*layout->offset_x; - ret.y += layout->at_y - (int)*layout->offset_y; + ret.x += layout->at_x - (float)*layout->offset_x; + ret.y += layout->at_y - (float)*layout->offset_y; return ret; } NK_API struct nk_vec2 @@ -21907,8 +21916,8 @@ nk_layout_space_to_local(struct nk_context *ctx, struct nk_vec2 ret) win = ctx->current; layout = win->layout; - ret.x += -layout->at_x + (int)*layout->offset_x; - ret.y += -layout->at_y + (int)*layout->offset_y; + ret.x += -layout->at_x + (float)*layout->offset_x; + ret.y += -layout->at_y + (float)*layout->offset_y; return ret; } NK_API struct nk_rect @@ -21923,8 +21932,8 @@ nk_layout_space_rect_to_screen(struct nk_context *ctx, struct nk_rect ret) win = ctx->current; layout = win->layout; - ret.x += layout->at_x - (int)*layout->offset_x; - ret.y += layout->at_y - (int)*layout->offset_y; + ret.x += layout->at_x - (float)*layout->offset_x; + ret.y += layout->at_y - (float)*layout->offset_y; return ret; } NK_API struct nk_rect @@ -21939,8 +21948,8 @@ nk_layout_space_rect_to_local(struct nk_context *ctx, struct nk_rect ret) win = ctx->current; layout = win->layout; - ret.x += -layout->at_x + (int)*layout->offset_x; - ret.y += -layout->at_y + (int)*layout->offset_y; + ret.x += -layout->at_x + (float)*layout->offset_x; + ret.y += -layout->at_y + (float)*layout->offset_y; return ret; } NK_LIB void @@ -21948,7 +21957,7 @@ nk_panel_alloc_row(const struct nk_context *ctx, struct nk_window *win) { struct nk_panel *layout = win->layout; struct nk_vec2 spacing = ctx->style.window.spacing; - const int row_height = layout->row.height - spacing.y; + const float row_height = layout->row.height - spacing.y; nk_panel_layout(ctx, win, row_height, layout->row.columns); } NK_LIB void @@ -21960,10 +21969,10 @@ nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, struct nk_vec2 spacing; - int item_offset = 0; - int item_width = 0; - int item_spacing = 0; - int panel_space = 0; + float item_offset = 0; + float item_width = 0; + float item_spacing = 0; + float panel_space = 0; NK_ASSERT(ctx); NK_ASSERT(ctx->current); @@ -21980,19 +21989,19 @@ nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, panel_space = nk_layout_row_calculate_usable_space(&ctx->style, layout->type, layout->bounds.w, layout->row.columns); - #define NK_FRAC(x) (x - (int)(int)x) /* will be used to remove fookin gaps */ + #define NK_FRAC(x) (x - (float)(int)x) /* will be used to remove fookin gaps */ /* calculate the width of one item inside the current layout space */ switch (layout->row.type) { case NK_LAYOUT_DYNAMIC_FIXED: { /* scaling fixed size widgets item width */ - int w = NK_MAX(1,panel_space) / (int)layout->row.columns; - item_offset = (int)layout->row.index * w; + float w = NK_MAX(1.0f,panel_space) / (float)layout->row.columns; + item_offset = (float)layout->row.index * w; item_width = w + NK_FRAC(item_offset); - item_spacing = (int)layout->row.index * spacing.x; + item_spacing = (float)layout->row.index * spacing.x; } break; case NK_LAYOUT_DYNAMIC_ROW: { /* scaling single ratio widget width */ - int w = layout->row.item_width * panel_space; + float w = layout->row.item_width * panel_space; item_offset = layout->row.item_offset; item_width = w + NK_FRAC(item_offset); item_spacing = 0; @@ -22006,22 +22015,22 @@ nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, case NK_LAYOUT_DYNAMIC_FREE: { /* panel width depended free widget placing */ bounds->x = layout->at_x + (layout->bounds.w * layout->row.item.x); - bounds->x -= (int)*layout->offset_x; + bounds->x -= (float)*layout->offset_x; bounds->y = layout->at_y + (layout->row.height * layout->row.item.y); - bounds->y -= (int)*layout->offset_y; + bounds->y -= (float)*layout->offset_y; bounds->w = layout->bounds.w * layout->row.item.w + NK_FRAC(bounds->x); bounds->h = layout->row.height * layout->row.item.h + NK_FRAC(bounds->y); return; } case NK_LAYOUT_DYNAMIC: { /* scaling arrays of panel width ratios for every widget */ - int ratio, w; + float ratio, w; NK_ASSERT(layout->row.ratio); ratio = (layout->row.ratio[layout->row.index] < 0) ? layout->row.item_width : layout->row.ratio[layout->row.index]; w = (ratio * panel_space); - item_spacing = (int)layout->row.index * spacing.x; + item_spacing = (float)layout->row.index * spacing.x; item_offset = layout->row.item_offset; item_width = w + NK_FRAC(item_offset); @@ -22033,14 +22042,14 @@ nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, case NK_LAYOUT_STATIC_FIXED: { /* non-scaling fixed widgets item width */ item_width = layout->row.item_width; - item_offset = (int)layout->row.index * item_width; - item_spacing = (int)layout->row.index * spacing.x; + item_offset = (float)layout->row.index * item_width; + item_spacing = (float)layout->row.index * spacing.x; } break; case NK_LAYOUT_STATIC_ROW: { /* scaling single ratio widget width */ item_width = layout->row.item_width; item_offset = layout->row.item_offset; - item_spacing = (int)layout->row.index * spacing.x; + item_spacing = (float)layout->row.index * spacing.x; if (modify) layout->row.item_offset += item_width; } break; case NK_LAYOUT_STATIC_FREE: { @@ -22049,28 +22058,28 @@ nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, bounds->w = layout->row.item.w; if (((bounds->x + bounds->w) > layout->max_x) && modify) layout->max_x = (bounds->x + bounds->w); - bounds->x -= (int)*layout->offset_x; + bounds->x -= (float)*layout->offset_x; bounds->y = layout->at_y + layout->row.item.y; - bounds->y -= (int)*layout->offset_y; + bounds->y -= (float)*layout->offset_y; bounds->h = layout->row.item.h; return; } case NK_LAYOUT_STATIC: { /* non-scaling array of panel pixel width for every widget */ - item_spacing = (int)layout->row.index * spacing.x; + item_spacing = (float)layout->row.index * spacing.x; item_width = layout->row.ratio[layout->row.index]; item_offset = layout->row.item_offset; if (modify) layout->row.item_offset += item_width; } break; case NK_LAYOUT_TEMPLATE: { /* stretchy row layout with combined dynamic/static widget width*/ - int w; + float w; NK_ASSERT(layout->row.index < layout->row.columns); NK_ASSERT(layout->row.index < NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS); w = layout->row.templates[layout->row.index]; item_offset = layout->row.item_offset; item_width = w + NK_FRAC(item_offset); - item_spacing = (int)layout->row.index * spacing.x; + item_spacing = (float)layout->row.index * spacing.x; if (modify) layout->row.item_offset += w; } break; #undef NK_FRAC @@ -22080,11 +22089,11 @@ nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, /* set the bounds of the newly allocated widget */ bounds->w = item_width; bounds->h = layout->row.height - spacing.y; - bounds->y = layout->at_y - (int)*layout->offset_y; + bounds->y = layout->at_y - (float)*layout->offset_y; bounds->x = layout->at_x + item_offset + item_spacing; if (((bounds->x + bounds->w) > layout->max_x) && modify) layout->max_x = bounds->x + bounds->w; - bounds->x -= (int)*layout->offset_x; + bounds->x -= (float)*layout->offset_x; } NK_LIB void nk_panel_alloc_space(struct nk_rect *bounds, const struct nk_context *ctx) @@ -22111,7 +22120,7 @@ nk_panel_alloc_space(struct nk_rect *bounds, const struct nk_context *ctx) NK_LIB void nk_layout_peek(struct nk_rect *bounds, struct nk_context *ctx) { - int y; + float y; int index; struct nk_window *win; struct nk_panel *layout; @@ -22158,7 +22167,7 @@ nk_tree_state_base(struct nk_context *ctx, enum nk_tree_type type, const struct nk_input *in; const struct nk_style_button *button; enum nk_symbol_type symbol; - int row_height; + float row_height; struct nk_vec2 item_spacing; struct nk_rect header = {0,0,0,0}; @@ -22253,7 +22262,7 @@ nk_tree_state_base(struct nk_context *ctx, enum nk_tree_type type, /* increase x-axis cursor widget position pointer */ if (*state == NK_MAXIMIZED) { - layout->at_x = header.x + (int)*layout->offset_x + style->tab.indent; + layout->at_x = header.x + (float)*layout->offset_x + style->tab.indent; layout->bounds.w = NK_MAX(layout->bounds.w, style->tab.indent); layout->bounds.w -= (style->tab.indent + style->window.padding.x); layout->row.tree_depth++; @@ -22308,7 +22317,7 @@ nk_tree_state_pop(struct nk_context *ctx) win = ctx->current; layout = win->layout; - layout->at_x -= ctx->style.tab.indent + (int)*layout->offset_x; + layout->at_x -= ctx->style.tab.indent + (float)*layout->offset_x; layout->bounds.w += ctx->style.tab.indent + ctx->style.window.padding.x; NK_ASSERT(layout->row.tree_depth); layout->row.tree_depth--; @@ -22344,11 +22353,11 @@ nk_tree_element_image_push_hashed_base(struct nk_context *ctx, enum nk_tree_type const struct nk_input *in; const struct nk_style_button *button; enum nk_symbol_type symbol; - int row_height; + float row_height; struct nk_vec2 padding; int text_len; - int text_width; + float text_width; struct nk_vec2 item_spacing; struct nk_rect header = {0,0,0,0}; @@ -22440,7 +22449,7 @@ nk_tree_element_image_push_hashed_base(struct nk_context *ctx, enum nk_tree_type } /* increase x-axis cursor widget position pointer */ if (*state == NK_MAXIMIZED) { - layout->at_x = header.x + (int)*layout->offset_x + style->tab.indent; + layout->at_x = header.x + (float)*layout->offset_x + style->tab.indent; layout->bounds.w = NK_MAX(layout->bounds.w, style->tab.indent); layout->bounds.w -= (style->tab.indent + style->window.padding.x); layout->row.tree_depth++; @@ -22782,8 +22791,8 @@ nk_list_view_begin(struct nk_context *ctx, struct nk_list_view *view, layout = win->layout; view->total_height = row_height * NK_MAX(row_count,1); - view->begin = (int)NK_MAX(((int)view->scroll_value / (int)row_height), 0); - view->count = (int)NK_MAX(nk_iceilf((layout->clip.h)/(int)row_height),0); + view->begin = (int)NK_MAX(((float)view->scroll_value / (float)row_height), 0.0f); + view->count = (int)NK_MAX(nk_iceilf((layout->clip.h)/(float)row_height),0); view->count = NK_MIN(view->count, row_count - view->begin); view->end = view->begin + view->count; view->ctx = ctx; @@ -22804,7 +22813,7 @@ nk_list_view_end(struct nk_list_view *view) ctx = view->ctx; win = ctx->current; layout = win->layout; - layout->at_y = layout->bounds.y + (int)view->total_height; + layout->at_y = layout->bounds.y + (float)view->total_height; *view->scroll_pointer = *view->scroll_pointer + view->scroll_value; nk_group_end(view->ctx); } @@ -22853,7 +22862,7 @@ nk_widget_size(struct nk_context *ctx) nk_layout_peek(&bounds, ctx); return nk_vec2(bounds.w, bounds.h); } -NK_API int +NK_API float nk_widget_width(struct nk_context *ctx) { struct nk_rect bounds; @@ -22865,7 +22874,7 @@ nk_widget_width(struct nk_context *ctx) nk_layout_peek(&bounds, ctx); return bounds.w; } -NK_API int +NK_API float nk_widget_height(struct nk_context *ctx) { struct nk_rect bounds; @@ -22888,10 +22897,10 @@ nk_widget_is_hovered(struct nk_context *ctx) return 0; c = ctx->current->layout->clip; - c.x = (int)((int)c.x); - c.y = (int)((int)c.y); - c.w = (int)((int)c.w); - c.h = (int)((int)c.h); + c.x = (float)((int)c.x); + c.y = (float)((int)c.y); + c.w = (float)((int)c.w); + c.h = (float)((int)c.h); nk_layout_peek(&bounds, ctx); nk_unify(&v, &c, bounds.x, bounds.y, bounds.x + bounds.w, bounds.y + bounds.h); @@ -22910,10 +22919,10 @@ nk_widget_is_mouse_clicked(struct nk_context *ctx, enum nk_buttons btn) return 0; c = ctx->current->layout->clip; - c.x = (int)((int)c.x); - c.y = (int)((int)c.y); - c.w = (int)((int)c.w); - c.h = (int)((int)c.h); + c.x = (float)((int)c.x); + c.y = (float)((int)c.y); + c.w = (float)((int)c.w); + c.h = (float)((int)c.h); nk_layout_peek(&bounds, ctx); nk_unify(&v, &c, bounds.x, bounds.y, bounds.x + bounds.w, bounds.y + bounds.h); @@ -22932,10 +22941,10 @@ nk_widget_has_mouse_click_down(struct nk_context *ctx, enum nk_buttons btn, nk_b return 0; c = ctx->current->layout->clip; - c.x = (int)((int)c.x); - c.y = (int)((int)c.y); - c.w = (int)((int)c.w); - c.h = (int)((int)c.h); + c.x = (float)((int)c.x); + c.y = (float)((int)c.y); + c.w = (float)((int)c.w); + c.h = (float)((int)c.h); nk_layout_peek(&bounds, ctx); nk_unify(&v, &c, bounds.x, bounds.y, bounds.x + bounds.w, bounds.y + bounds.h); @@ -22973,16 +22982,16 @@ nk_widget(struct nk_rect *bounds, const struct nk_context *ctx) NK_ASSERT(!(layout->flags & NK_WINDOW_HIDDEN)); NK_ASSERT(!(layout->flags & NK_WINDOW_CLOSED)); - /* need to convert to int here to remove inting point errors */ - bounds->x = (int)((int)bounds->x); - bounds->y = (int)((int)bounds->y); - bounds->w = (int)((int)bounds->w); - bounds->h = (int)((int)bounds->h); + /* need to convert to int here to remove floating point errors */ + bounds->x = (float)((int)bounds->x); + bounds->y = (float)((int)bounds->y); + bounds->w = (float)((int)bounds->w); + bounds->h = (float)((int)bounds->h); - c.x = (int)((int)c.x); - c.y = (int)((int)c.y); - c.w = (int)((int)c.w); - c.h = (int)((int)c.h); + c.x = (float)((int)c.x); + c.y = (float)((int)c.y); + c.w = (float)((int)c.w); + c.h = (float)((int)c.h); nk_unify(&v, &c, bounds->x, bounds->y, bounds->x + bounds->w, bounds->y + bounds->h); if (!NK_INTERSECT(c.x, c.y, c.w, c.h, bounds->x, bounds->y, bounds->w, bounds->h)) @@ -23055,7 +23064,7 @@ nk_widget_text(struct nk_command_buffer *o, struct nk_rect b, nk_flags a, const struct nk_user_font *f) { struct nk_rect label; - int text_width; + float text_width; NK_ASSERT(o); NK_ASSERT(t); @@ -23067,27 +23076,27 @@ nk_widget_text(struct nk_command_buffer *o, struct nk_rect b, label.h = NK_MIN(f->height, b.h - 2 * t->padding.y); text_width = f->width(f->userdata, f->height, (const char*)string, len); - text_width += (2 * t->padding.x); + text_width += (2.0f * t->padding.x); /* align in x-axis */ if (a & NK_TEXT_ALIGN_LEFT) { label.x = b.x + t->padding.x; label.w = NK_MAX(0, b.w - 2 * t->padding.x); } else if (a & NK_TEXT_ALIGN_CENTERED) { - label.w = NK_MAX(1, 2 * t->padding.x + (int)text_width); + label.w = NK_MAX(1, 2 * t->padding.x + (float)text_width); label.x = (b.x + t->padding.x + ((b.w - 2 * t->padding.x) - label.w) / 2); label.x = NK_MAX(b.x + t->padding.x, label.x); label.w = NK_MIN(b.x + b.w, label.x + label.w); if (label.w >= label.x) label.w -= label.x; } else if (a & NK_TEXT_ALIGN_RIGHT) { - label.x = NK_MAX(b.x + t->padding.x, (b.x + b.w) - (2 * t->padding.x + (int)text_width)); - label.w = (int)text_width + 2 * t->padding.x; + label.x = NK_MAX(b.x + t->padding.x, (b.x + b.w) - (2 * t->padding.x + (float)text_width)); + label.w = (float)text_width + 2 * t->padding.x; } else return; /* align in y-axis */ if (a & NK_TEXT_ALIGN_MIDDLE) { - label.y = b.y + b.h/2 - (int)f->height/2; - label.h = NK_MAX(b.h/2, b.h - (b.h/2 + f->height/2)); + label.y = b.y + b.h/2.0f - (float)f->height/2.0f; + label.h = NK_MAX(b.h/2.0f, b.h - (b.h/2.0f + f->height/2.0f)); } else if (a & NK_TEXT_ALIGN_BOTTOM) { label.y = b.y + b.h - f->height; label.h = f->height; @@ -23099,7 +23108,7 @@ nk_widget_text_wrap(struct nk_command_buffer *o, struct nk_rect b, const char *string, int len, const struct nk_text *t, const struct nk_user_font *f) { - int width; + float width; int glyphs = 0; int fitting = 0; int done = 0; @@ -23272,14 +23281,20 @@ nk_value_uint(struct nk_context *ctx, const char *prefix, unsigned int value) nk_labelf(ctx, NK_TEXT_LEFT, "%s: %u", prefix, value); } NK_API void +nk_value_float(struct nk_context *ctx, const char *prefix, float value) +{ + double double_value = (double)value; + nk_labelf(ctx, NK_TEXT_LEFT, "%s: %.3f", prefix, double_value); +} +NK_API void nk_value_color_byte(struct nk_context *ctx, const char *p, struct nk_color c) { nk_labelf(ctx, NK_TEXT_LEFT, "%s: (%d, %d, %d, %d)", p, c.r, c.g, c.b, c.a); } NK_API void -nk_value_color_int(struct nk_context *ctx, const char *p, struct nk_color color) +nk_value_color_float(struct nk_context *ctx, const char *p, struct nk_color color) { - int c[4]; nk_color_dv(c, color); + double c[4]; nk_color_dv(c, color); nk_labelf(ctx, NK_TEXT_LEFT, "%s: (%.2f, %.2f, %.2f, %.2f)", p, c[0], c[1], c[2], c[3]); } @@ -23586,7 +23601,7 @@ nk_nine_slice_is_sub9slice(const struct nk_nine_slice* slice) NK_LIB void nk_draw_symbol(struct nk_command_buffer *out, enum nk_symbol_type type, struct nk_rect content, struct nk_color background, struct nk_color foreground, - int border_width, const struct nk_user_font *font) + float border_width, const struct nk_user_font *font) { switch (type) { case NK_SYMBOL_X: @@ -24386,7 +24401,7 @@ nk_do_toggle(nk_flags *state, /* calculate the selector space */ select.w = font->height; select.h = select.w; - select.y = r.y + r.h/2 - select.h/2; + select.y = r.y + r.h/2.0f - select.h/2.0f; select.x = r.x; /* calculate the bounds of the cursor inside the selector */ @@ -24907,11 +24922,11 @@ nk_select_symbol_label(struct nk_context *ctx, enum nk_symbol_type sym, * SLIDER * * ===============================================================*/ -NK_LIB int +NK_LIB float nk_slider_behavior(nk_flags *state, struct nk_rect *logical_cursor, struct nk_rect *visual_cursor, struct nk_input *in, - struct nk_rect bounds, int slider_min, int slider_max, int slider_value, - int slider_step, int slider_steps) + struct nk_rect bounds, float slider_min, float slider_max, float slider_value, + float slider_step, float slider_steps) { int left_mouse_down; int left_mouse_click_in_cursor; @@ -24923,14 +24938,14 @@ nk_slider_behavior(nk_flags *state, struct nk_rect *logical_cursor, NK_BUTTON_LEFT, *visual_cursor, nk_true); if (left_mouse_down && left_mouse_click_in_cursor) { - int ratio = 0; - const int d = in->mouse.pos.x - (visual_cursor->x+visual_cursor->w*0); - const int pxstep = bounds.w / slider_steps; + float ratio = 0; + const float d = in->mouse.pos.x - (visual_cursor->x+visual_cursor->w*0.5f); + const float pxstep = bounds.w / slider_steps; /* only update value if the next slider step is reached */ *state = NK_WIDGET_STATE_ACTIVE; if (NK_ABS(d) >= pxstep) { - const int steps = (int)((int)(NK_ABS(d) / pxstep)); + const float steps = (float)((int)(NK_ABS(d) / pxstep)); slider_value += (d > 0) ? (slider_step*steps) : -(slider_step*steps); slider_value = NK_CLAMP(slider_min, slider_value, slider_max); ratio = (slider_value - slider_min)/slider_step; @@ -24952,7 +24967,7 @@ nk_slider_behavior(nk_flags *state, struct nk_rect *logical_cursor, NK_LIB void nk_draw_slider(struct nk_command_buffer *out, nk_flags state, const struct nk_style_slider *style, const struct nk_rect *bounds, - const struct nk_rect *visual_cursor, int min, int value, int max) + const struct nk_rect *visual_cursor, float min, float value, float max) { struct nk_rect fill; struct nk_rect bar; @@ -24986,7 +25001,7 @@ nk_draw_slider(struct nk_command_buffer *out, nk_flags state, bar.h = bounds->h/6; /* filled background bar style */ - fill.w = (visual_cursor->x + (visual_cursor->w/2)) - bar.x; + fill.w = (visual_cursor->x + (visual_cursor->w/2.0f)) - bar.x; fill.x = bar.x; fill.y = bar.y; fill.h = bar.h; @@ -25015,19 +25030,19 @@ nk_draw_slider(struct nk_command_buffer *out, nk_flags state, else nk_fill_circle(out, *visual_cursor, cursor->data.color); } -NK_LIB int +NK_LIB float nk_do_slider(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, - int min, int val, int max, int step, + float min, float val, float max, float step, const struct nk_style_slider *style, struct nk_input *in, const struct nk_user_font *font) { - int slider_range; - int slider_min; - int slider_max; - int slider_value; - int slider_steps; - int cursor_offset; + float slider_range; + float slider_min; + float slider_max; + float slider_value; + float slider_steps; + float cursor_offset; struct nk_rect visual_cursor; struct nk_rect logical_cursor; @@ -25046,7 +25061,7 @@ nk_do_slider(nk_flags *state, bounds.h -= 2 * style->padding.y; /* optional buttons */ - //if (style->show_buttons) { + if (style->show_buttons) { nk_flags ws; struct nk_rect button; button.y = bounds.y; @@ -25067,10 +25082,10 @@ nk_do_slider(nk_flags *state, bounds.x = bounds.x + button.w + style->spacing.x; bounds.w = bounds.w - (2*button.w + 2*style->spacing.x); - //} + } /* remove one cursor size to support visual cursor */ - bounds.x += style->cursor_size.x; + bounds.x += style->cursor_size.x*0.5f; bounds.w -= style->cursor_size.x; /* make sure the provided values are correct */ @@ -25091,12 +25106,12 @@ nk_do_slider(nk_flags *state, visual_cursor.h = style->cursor_size.y; visual_cursor.w = style->cursor_size.x; - visual_cursor.y = (bounds.y + bounds.h) - visual_cursor.h; - visual_cursor.x = logical_cursor.x - visual_cursor.w; + visual_cursor.y = (bounds.y + bounds.h*0.5f) - visual_cursor.h*0.5f; + visual_cursor.x = logical_cursor.x - visual_cursor.w*0.5f; slider_value = nk_slider_behavior(state, &logical_cursor, &visual_cursor, in, bounds, slider_min, slider_max, slider_value, step, slider_steps); - visual_cursor.x = logical_cursor.x - visual_cursor.w; + visual_cursor.x = logical_cursor.x - visual_cursor.w*0.5f; /* draw slider */ if (style->draw_begin) style->draw_begin(out, style->userdata); @@ -25105,8 +25120,8 @@ nk_do_slider(nk_flags *state, return slider_value; } NK_API nk_bool -nk_slider_int(struct nk_context *ctx, int min_value, int *value, int max_value, - int value_step) +nk_slider_float(struct nk_context *ctx, float min_value, float *value, float max_value, + float value_step) { struct nk_window *win; struct nk_panel *layout; @@ -25114,7 +25129,7 @@ nk_slider_int(struct nk_context *ctx, int min_value, int *value, int max_value, const struct nk_style *style; int ret = 0; - int old_value; + float old_value; struct nk_rect bounds; enum nk_widget_layout_states state; @@ -25138,10 +25153,26 @@ nk_slider_int(struct nk_context *ctx, int min_value, int *value, int max_value, old_value, max_value, value_step, &style->slider, in, style->font); return (old_value > *value || old_value < *value); } +NK_API float +nk_slide_float(struct nk_context *ctx, float min, float val, float max, float step) +{ + nk_slider_float(ctx, min, &val, max, step); return val; +} NK_API int nk_slide_int(struct nk_context *ctx, int min, int val, int max, int step) { - nk_slider_int(ctx, min, &val, max, step); return val; + float value = (float)val; + nk_slider_float(ctx, (float)min, &value, (float)max, (float)step); + return (int)value; +} +NK_API nk_bool +nk_slider_int(struct nk_context *ctx, int min, int *val, int max, int step) +{ + int ret; + float value = (float)*val; + ret = nk_slider_float(ctx, (float)min, &value, (float)max, (float)step); + *val = (int)value; + return ret; } @@ -25170,9 +25201,9 @@ nk_progress_behavior(nk_flags *state, struct nk_input *in, if (in && left_mouse_down && left_mouse_click_in_cursor) { if (left_mouse_down && left_mouse_click_in_cursor) { - int ratio = NK_MAX(0, (int)(in->mouse.pos.x - cursor.x)) / (int)cursor.w; - value = (nk_size)NK_CLAMP(0, (int)max * ratio, (int)max); - in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.x = cursor.x + cursor.w/2; + float ratio = NK_MAX(0, (float)(in->mouse.pos.x - cursor.x)) / (float)cursor.w; + value = (nk_size)NK_CLAMP(0, (float)max * ratio, (float)max); + in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.x = cursor.x + cursor.w/2.0f; *state |= NK_WIDGET_STATE_ACTIVE; } } @@ -25240,7 +25271,7 @@ nk_do_progress(nk_flags *state, nk_size value, nk_size max, nk_bool modifiable, const struct nk_style_progress *style, struct nk_input *in) { - int prog_scale; + float prog_scale; nk_size prog_value; struct nk_rect cursor; @@ -25252,7 +25283,7 @@ nk_do_progress(nk_flags *state, cursor.w = NK_MAX(bounds.w, 2 * style->padding.x + 2 * style->border); cursor.h = NK_MAX(bounds.h, 2 * style->padding.y + 2 * style->border); cursor = nk_pad_rect(bounds, nk_vec2(style->padding.x + style->border, style->padding.y + style->border)); - prog_scale = (int)value / (int)max; + prog_scale = (float)value / (float)max; /* update progressbar */ prog_value = NK_MIN(value, max); @@ -25312,18 +25343,18 @@ nk_prog(struct nk_context *ctx, nk_size cur, nk_size max, nk_bool modifyable) * SCROLLBAR * * ===============================================================*/ -NK_LIB int +NK_LIB float nk_scrollbar_behavior(nk_flags *state, struct nk_input *in, int has_scrolling, const struct nk_rect *scroll, const struct nk_rect *cursor, const struct nk_rect *empty0, - const struct nk_rect *empty1, int scroll_offset, - int target, int scroll_step, enum nk_orientation o) + const struct nk_rect *empty1, float scroll_offset, + float target, float scroll_step, enum nk_orientation o) { nk_flags ws = 0; int left_mouse_down; unsigned int left_mouse_clicked; int left_mouse_click_in_cursor; - int scroll_delta; + float scroll_delta; nk_widget_state_reset(state); if (!in) return scroll_offset; @@ -25338,22 +25369,22 @@ nk_scrollbar_behavior(nk_flags *state, struct nk_input *in, scroll_delta = (o == NK_VERTICAL) ? in->mouse.scroll_delta.y: in->mouse.scroll_delta.x; if (left_mouse_down && left_mouse_click_in_cursor && !left_mouse_clicked) { /* update cursor by mouse dragging */ - int pixel, delta; + float pixel, delta; *state = NK_WIDGET_STATE_ACTIVE; if (o == NK_VERTICAL) { - int cursor_y; + float cursor_y; pixel = in->mouse.delta.y; delta = (pixel / scroll->h) * target; scroll_offset = NK_CLAMP(0, scroll_offset + delta, target - scroll->h); cursor_y = scroll->y + ((scroll_offset/target) * scroll->h); - in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.y = cursor_y + cursor->h/2; + in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.y = cursor_y + cursor->h/2.0f; } else { - int cursor_x; + float cursor_x; pixel = in->mouse.delta.x; delta = (pixel / scroll->w) * target; scroll_offset = NK_CLAMP(0, scroll_offset + delta, target - scroll->w); cursor_x = scroll->x + ((scroll_offset/target) * scroll->w); - in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.x = cursor_x + cursor->w/2; + in->mouse.buttons[NK_BUTTON_LEFT].clicked_pos.x = cursor_x + cursor->w/2.0f; } } else if ((nk_input_is_key_pressed(in, NK_KEY_SCROLL_UP) && o == NK_VERTICAL && has_scrolling)|| nk_button_behavior(&ws, *empty0, in, NK_BUTTON_DEFAULT)) { @@ -25436,10 +25467,10 @@ nk_draw_scrollbar(struct nk_command_buffer *out, nk_flags state, break; } } -NK_LIB int +NK_LIB float nk_do_scrollbarv(nk_flags *state, struct nk_command_buffer *out, struct nk_rect scroll, int has_scrolling, - int offset, int target, int step, int button_pixel_inc, + float offset, float target, float step, float button_pixel_inc, const struct nk_style_scrollbar *style, struct nk_input *in, const struct nk_user_font *font) { @@ -25447,10 +25478,10 @@ nk_do_scrollbarv(nk_flags *state, struct nk_rect empty_south; struct nk_rect cursor; - int scroll_step; - int scroll_offset; - int scroll_off; - int scroll_ratio; + float scroll_step; + float scroll_offset; + float scroll_off; + float scroll_ratio; NK_ASSERT(out); NK_ASSERT(style); @@ -25464,7 +25495,7 @@ nk_do_scrollbarv(nk_flags *state, /* optional scrollbar buttons */ if (style->show_buttons) { nk_flags ws; - int scroll_h; + float scroll_h; struct nk_rect button; button.x = scroll.x; @@ -25525,10 +25556,10 @@ nk_do_scrollbarv(nk_flags *state, if (style->draw_end) style->draw_end(out, style->userdata); return scroll_offset; } -NK_LIB int +NK_LIB float nk_do_scrollbarh(nk_flags *state, struct nk_command_buffer *out, struct nk_rect scroll, int has_scrolling, - int offset, int target, int step, int button_pixel_inc, + float offset, float target, float step, float button_pixel_inc, const struct nk_style_scrollbar *style, struct nk_input *in, const struct nk_user_font *font) { @@ -25536,10 +25567,10 @@ nk_do_scrollbarh(nk_flags *state, struct nk_rect empty_west; struct nk_rect empty_east; - int scroll_step; - int scroll_offset; - int scroll_off; - int scroll_ratio; + float scroll_step; + float scroll_offset; + float scroll_off; + float scroll_ratio; NK_ASSERT(out); NK_ASSERT(style); @@ -25553,7 +25584,7 @@ nk_do_scrollbarh(nk_flags *state, /* optional scrollbar buttons */ if (style->show_buttons) { nk_flags ws; - int scroll_w; + float scroll_w; struct nk_rect button; button.y = scroll.y; button.w = scroll.h; @@ -25625,18 +25656,18 @@ nk_do_scrollbarh(nk_flags *state, * ===============================================================*/ /* stb_textedit.h - v1.8 - public domain - Sean Barrett */ struct nk_text_find { - int x,y; /* position of n'th character */ - int height; /* height of line */ + float x,y; /* position of n'th character */ + float height; /* height of line */ int first_char, length; /* first char of row, and length */ int prev_first; /*_ first char of previous row */ }; struct nk_text_edit_row { - int x0,x1; + float x0,x1; /* starting x location, end x location (allows for align=right, etc) */ - int baseline_y_delta; + float baseline_y_delta; /* position of baseline relative to previous row's baseline*/ - int ymin,ymax; + float ymin,ymax; /* height of row above and below baseline */ int num_chars; }; @@ -25647,7 +25678,7 @@ NK_INTERN void nk_textedit_makeundo_insert(struct nk_text_edit*, int, int); NK_INTERN void nk_textedit_makeundo_replace(struct nk_text_edit*, int, int, int); #define NK_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end) -NK_INTERN int +NK_INTERN float nk_textedit_get_width(const struct nk_text_edit *edit, int line_start, int char_id, const struct nk_user_font *font) { @@ -25658,7 +25689,7 @@ nk_textedit_get_width(const struct nk_text_edit *edit, int line_start, int char_ } NK_INTERN void nk_textedit_layout_row(struct nk_text_edit_row *r, struct nk_text_edit *edit, - int line_start_id, int row_height, const struct nk_user_font *font) + int line_start_id, float row_height, const struct nk_user_font *font) { int l; int glyphs = 0; @@ -25670,20 +25701,20 @@ nk_textedit_layout_row(struct nk_text_edit_row *r, struct nk_text_edit *edit, const struct nk_vec2 size = nk_text_calculate_text_bounds(font, text, (int)(end - text), row_height, &remaining, 0, &glyphs, NK_STOP_ON_NEW_LINE); - r->x0 = 0; + r->x0 = 0.0f; r->x1 = size.x; r->baseline_y_delta = size.y; - r->ymin = 0; + r->ymin = 0.0f; r->ymax = size.y; r->num_chars = glyphs; } NK_INTERN int -nk_textedit_locate_coord(struct nk_text_edit *edit, int x, int y, - const struct nk_user_font *font, int row_height) +nk_textedit_locate_coord(struct nk_text_edit *edit, float x, float y, + const struct nk_user_font *font, float row_height) { struct nk_text_edit_row r; int n = edit->string.len; - int base_y = 0, prev_x; + float base_y = 0, prev_x; int i=0, k; r.x0 = r.x1 = 0; @@ -25720,7 +25751,7 @@ nk_textedit_locate_coord(struct nk_text_edit *edit, int x, int y, k = i; prev_x = r.x0; for (i=0; i < r.num_chars; ++i) { - int w = nk_textedit_get_width(edit, k, i, font); + float w = nk_textedit_get_width(edit, k, i, font); if (x < prev_x+w) { if (x < prev_x+w/2) return k+i; @@ -25738,8 +25769,8 @@ nk_textedit_locate_coord(struct nk_text_edit *edit, int x, int y, else return i+r.num_chars; } NK_LIB void -nk_textedit_click(struct nk_text_edit *state, int x, int y, - const struct nk_user_font *font, int row_height) +nk_textedit_click(struct nk_text_edit *state, float x, float y, + const struct nk_user_font *font, float row_height) { /* API click: on mouse down, move the cursor to the clicked location, * and reset the selection */ @@ -25749,8 +25780,8 @@ nk_textedit_click(struct nk_text_edit *state, int x, int y, state->has_preferred_x = 0; } NK_LIB void -nk_textedit_drag(struct nk_text_edit *state, int x, int y, - const struct nk_user_font *font, int row_height) +nk_textedit_drag(struct nk_text_edit *state, float x, float y, + const struct nk_user_font *font, float row_height) { /* API drag: on mouse drag, move the cursor and selection endpoint * to the clicked location */ @@ -25761,7 +25792,7 @@ nk_textedit_drag(struct nk_text_edit *state, int x, int y, } NK_INTERN void nk_textedit_find_charpos(struct nk_text_find *find, struct nk_text_edit *state, - int n, int single_line, const struct nk_user_font *font, int row_height) + int n, int single_line, const struct nk_user_font *font, float row_height) { /* find the x/y location of a character, and remember info about the previous * row in case we get a move-up event (for page up, we'll have to rescan) */ @@ -26022,7 +26053,7 @@ nk_textedit_text(struct nk_text_edit *state, const char *text, int total_len) } NK_LIB void nk_textedit_key(struct nk_text_edit *state, enum nk_keys key, int shift_mod, - const struct nk_user_font *font, int row_height) + const struct nk_user_font *font, float row_height) { retry: switch (key) @@ -26159,8 +26190,8 @@ retry: /* now find character position down a row */ if (find.length) { - int x; - int goal_x = state->has_preferred_x ? state->preferred_x : find.x; + float x; + float goal_x = state->has_preferred_x ? state->preferred_x : find.x; int start = find.first_char + find.length; state->cursor = start; @@ -26168,7 +26199,7 @@ retry: x = row.x0; for (i=0; i < row.num_chars && x < row.x1; ++i) { - int dx = nk_textedit_get_width(state, start, i, font); + float dx = nk_textedit_get_width(state, start, i, font); x += dx; if (x > goal_x) break; @@ -26207,15 +26238,15 @@ retry: /* can only go up if there's a previous row */ if (find.prev_first != find.first_char) { /* now find character position up a row */ - int x; - int goal_x = state->has_preferred_x ? state->preferred_x : find.x; + float x; + float goal_x = state->has_preferred_x ? state->preferred_x : find.x; state->cursor = find.prev_first; nk_textedit_layout_row(&row, state, state->cursor, row_height, font); x = row.x0; for (i=0; i < row.num_chars && x < row.x1; ++i) { - int dx = nk_textedit_get_width(state, find.prev_first, i, font); + float dx = nk_textedit_get_width(state, find.prev_first, i, font); x += dx; if (x > goal_x) break; @@ -26668,7 +26699,7 @@ nk_filter_ascii(const struct nk_text_edit *box, nk_rune unicode) else return nk_true; } NK_API nk_bool -nk_filter_int(const struct nk_text_edit *box, nk_rune unicode) +nk_filter_float(const struct nk_text_edit *box, nk_rune unicode) { NK_UNUSED(box); if ((unicode < '0' || unicode > '9') && unicode != '.' && unicode != '-') @@ -26717,8 +26748,8 @@ nk_filter_binary(const struct nk_text_edit *box, nk_rune unicode) * ===============================================================*/ NK_LIB void nk_edit_draw_text(struct nk_command_buffer *out, - const struct nk_style_edit *style, int pos_x, int pos_y, - int x_offset, const char *text, int byte_len, int row_height, + const struct nk_style_edit *style, float pos_x, float pos_y, + float x_offset, const char *text, int byte_len, float row_height, const struct nk_user_font *font, struct nk_color background, struct nk_color foreground, nk_bool is_selected) { @@ -26730,10 +26761,10 @@ nk_edit_draw_text(struct nk_command_buffer *out, {int glyph_len = 0; nk_rune unicode = 0; int text_len = 0; - int line_width = 0; - int glyph_width; + float line_width = 0; + float glyph_width; const char *line = text; - int line_offset = 0; + float line_offset = 0; int line_count = 0; struct nk_text txt; @@ -26774,7 +26805,7 @@ nk_edit_draw_text(struct nk_command_buffer *out, continue; } glyph_width = font->width(font->userdata, font->height, text+text_len, glyph_len); - line_width += (int)glyph_width; + line_width += (float)glyph_width; text_len += glyph_len; glyph_len = nk_utf_decode(text + text_len, &unicode, byte_len-text_len); continue; @@ -26803,7 +26834,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, { struct nk_rect area; nk_flags ret = 0; - int row_height; + float row_height; char prev_state = 0; char is_hovered = 0; char select_all = 0; @@ -26820,8 +26851,8 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, /* visible text area calculation */ area.x = bounds.x + style->padding.x + style->border; area.y = bounds.y + style->padding.y + style->border; - area.w = bounds.w - (2 * style->padding.x + 2 * style->border); - area.h = bounds.h - (2 * style->padding.y + 2 * style->border); + area.w = bounds.w - (2.0f * style->padding.x + 2 * style->border); + area.h = bounds.h - (2.0f * style->padding.y + 2 * style->border); if (flags & NK_EDIT_MULTILINE) area.w = NK_MAX(0, area.w - style->scrollbar_size.x); row_height = (flags & NK_EDIT_MULTILINE)? font->height + style->row_padding: area.h; @@ -26866,8 +26897,8 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, if (edit->active && in) { int shift_mod = in->keyboard.keys[NK_KEY_SHIFT].down; - const int mouse_x = (in->mouse.pos.x - area.x) + edit->scrollbar.x; - const int mouse_y = (in->mouse.pos.y - area.y) + edit->scrollbar.y; + const float mouse_x = (in->mouse.pos.x - area.x) + edit->scrollbar.x; + const float mouse_y = (in->mouse.pos.y - area.y) + edit->scrollbar.y; /* mouse click handler */ is_hovered = (char)nk_input_is_mouse_hovering_rect(in, area); @@ -26877,7 +26908,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, in->mouse.buttons[NK_BUTTON_LEFT].clicked) { nk_textedit_click(edit, mouse_x, mouse_y, font, row_height); } else if (is_hovered && in->mouse.buttons[NK_BUTTON_LEFT].down && - (in->mouse.delta.x != 0 || in->mouse.delta.y != 0)) { + (in->mouse.delta.x != 0.0f || in->mouse.delta.y != 0.0f)) { nk_textedit_drag(edit, mouse_x, mouse_y, font, row_height); cursor_follow = nk_true; } else if (is_hovered && in->mouse.buttons[NK_BUTTON_RIGHT].clicked && @@ -27010,11 +27041,11 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, int selection_end = NK_MAX(edit->select_start, edit->select_end); /* calculate total line count + total space + cursor/selection position */ - int line_width = 0; + float line_width = 0.0f; if (text && len) { /* utf8 encoding */ - int glyph_width; + float glyph_width; int glyph_len = 0; nk_rune unicode = 0; int text_len = 0; @@ -27037,7 +27068,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, const char *remaining; /* calculate 2d position */ - cursor_pos.y = (int)(total_lines-1) * row_height; + cursor_pos.y = (float)(total_lines-1) * row_height; row_size = nk_text_calculate_text_bounds(font, text+row_begin, text_len-row_begin, row_height, &remaining, &out_offset, &glyph_offset, NK_STOP_ON_NEW_LINE); @@ -27055,7 +27086,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, const char *remaining; /* calculate 2d position */ - selection_offset_start.y = (int)(NK_MAX(total_lines-1,0)) * row_height; + selection_offset_start.y = (float)(NK_MAX(total_lines-1,0)) * row_height; row_size = nk_text_calculate_text_bounds(font, text+row_begin, text_len-row_begin, row_height, &remaining, &out_offset, &glyph_offset, NK_STOP_ON_NEW_LINE); @@ -27073,7 +27104,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, const char *remaining; /* calculate 2d position */ - selection_offset_end.y = (int)(total_lines-1) * row_height; + selection_offset_end.y = (float)(total_lines-1) * row_height; row_size = nk_text_calculate_text_bounds(font, text+row_begin, text_len-row_begin, row_height, &remaining, &out_offset, &glyph_offset, NK_STOP_ON_NEW_LINE); @@ -27094,14 +27125,14 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, glyphs++; text_len += glyph_len; - line_width += (int)glyph_width; + line_width += (float)glyph_width; glyph_len = nk_utf_decode(text + text_len, &unicode, len-text_len); glyph_width = font->width(font->userdata, font->height, text+text_len, glyph_len); continue; } - text_size.y = (int)total_lines * row_height; + text_size.y = (float)total_lines * row_height; /* handle case when cursor is at end of text buffer */ if (!cursor_ptr && edit->cursor == edit->string.len) { @@ -27116,17 +27147,17 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, /* update scrollbar to follow cursor */ if (!(flags & NK_EDIT_NO_HORIZONTAL_SCROLL)) { /* horizontal scroll */ - const int scroll_increment = area.w * 0; + const float scroll_increment = area.w * 0.25f; if (cursor_pos.x < edit->scrollbar.x) - edit->scrollbar.x = (int)(int)NK_MAX(0, cursor_pos.x - scroll_increment); + edit->scrollbar.x = (float)(int)NK_MAX(0.0f, cursor_pos.x - scroll_increment); if (cursor_pos.x >= edit->scrollbar.x + area.w) - edit->scrollbar.x = (int)(int)NK_MAX(0, cursor_pos.x - area.w + scroll_increment); + edit->scrollbar.x = (float)(int)NK_MAX(0.0f, cursor_pos.x - area.w + scroll_increment); } else edit->scrollbar.x = 0; if (flags & NK_EDIT_MULTILINE) { /* vertical scroll */ if (cursor_pos.y < edit->scrollbar.y) - edit->scrollbar.y = NK_MAX(0, cursor_pos.y - row_height); + edit->scrollbar.y = NK_MAX(0.0f, cursor_pos.y - row_height); if (cursor_pos.y >= edit->scrollbar.y + row_height) edit->scrollbar.y = edit->scrollbar.y + row_height; } else edit->scrollbar.y = 0; @@ -27137,18 +27168,18 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, { nk_flags ws; struct nk_rect scroll; - int scroll_target; - int scroll_offset; - int scroll_step; - int scroll_inc; + float scroll_target; + float scroll_offset; + float scroll_step; + float scroll_inc; scroll = area; scroll.x = (bounds.x + bounds.w - style->border) - style->scrollbar_size.x; scroll.w = style->scrollbar_size.x; scroll_offset = edit->scrollbar.y; - scroll_step = scroll.h * 0; - scroll_inc = scroll.h * 0; + scroll_step = scroll.h * 0.10f; + scroll_inc = scroll.h * 0.01f; scroll_target = text_size.y; edit->scrollbar.y = nk_do_scrollbarv(&ws, out, scroll, 0, scroll_offset, scroll_target, scroll_step, scroll_inc, @@ -27253,7 +27284,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, cursor.w = style->cursor_size; cursor.h = font->height; cursor.x = area.x + cursor_pos.x - edit->scrollbar.x; - cursor.y = area.y + cursor_pos.y + row_height/2 - cursor.h/2; + cursor.y = area.y + cursor_pos.y + row_height/2.0f - cursor.h/2.0f; cursor.y -= edit->scrollbar.y; nk_fill_rect(out, cursor, 0, cursor_color); } else { @@ -27371,8 +27402,8 @@ nk_edit_string(struct nk_context *ctx, nk_flags flags, edit->select_end = win->edit.sel_end; } edit->mode = win->edit.mode; - edit->scrollbar.x = (int)win->edit.scrollbar.x; - edit->scrollbar.y = (int)win->edit.scrollbar.y; + edit->scrollbar.x = (float)win->edit.scrollbar.x; + edit->scrollbar.y = (float)win->edit.scrollbar.y; edit->active = nk_true; } else edit->active = nk_false; @@ -27477,7 +27508,7 @@ nk_edit_string_zero_terminated(struct nk_context *ctx, nk_flags flags, NK_LIB void nk_drag_behavior(nk_flags *state, const struct nk_input *in, struct nk_rect drag, struct nk_property_variant *variant, - int inc_per_pixel) + float inc_per_pixel) { int left_mouse_down = in && in->mouse.buttons[NK_BUTTON_LEFT].down; int left_mouse_click_in_cursor = in && @@ -27488,7 +27519,7 @@ nk_drag_behavior(nk_flags *state, const struct nk_input *in, *state = NK_WIDGET_STATE_HOVERED; if (left_mouse_down && left_mouse_click_in_cursor) { - int delta, pixels; + float delta, pixels; pixels = in->mouse.delta.x; delta = pixels * inc_per_pixel; switch (variant->kind) { @@ -27497,6 +27528,14 @@ nk_drag_behavior(nk_flags *state, const struct nk_input *in, variant->value.i = variant->value.i + (int)delta; variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i, variant->max_value.i); break; + case NK_PROPERTY_FLOAT: + variant->value.f = variant->value.f + (float)delta; + variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f, variant->max_value.f); + break; + case NK_PROPERTY_DOUBLE: + variant->value.d = variant->value.d + (double)delta; + variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d, variant->max_value.d); + break; } *state = NK_WIDGET_STATE_ACTIVE; } @@ -27509,7 +27548,7 @@ NK_LIB void nk_property_behavior(nk_flags *ws, const struct nk_input *in, struct nk_rect property, struct nk_rect label, struct nk_rect edit, struct nk_rect empty, int *state, struct nk_property_variant *variant, - int inc_per_pixel) + float inc_per_pixel) { nk_widget_state_reset(ws); if (in && *state == NK_PROPERTY_DEFAULT) { @@ -27570,7 +27609,7 @@ NK_LIB void nk_do_property(nk_flags *ws, struct nk_command_buffer *out, struct nk_rect property, const char *name, struct nk_property_variant *variant, - int inc_per_pixel, char *buffer, int *len, + float inc_per_pixel, char *buffer, int *len, int *state, int *cursor, int *select_begin, int *select_end, const struct nk_style_property *style, enum nk_property_filter filter, struct nk_input *in, @@ -27579,12 +27618,12 @@ nk_do_property(nk_flags *ws, { const nk_plugin_filter filters[] = { nk_filter_decimal, - nk_filter_int + nk_filter_float }; nk_bool active, old; int num_len = 0, name_len; char string[NK_MAX_NUMBER_BUFFER]; - int size; + float size; char *dst = 0; int *length; @@ -27599,13 +27638,13 @@ nk_do_property(nk_flags *ws, left.h = font->height/2; left.w = left.h; left.x = property.x + style->border + style->padding.x; - left.y = property.y + style->border + property.h/2 - left.h/2; + left.y = property.y + style->border + property.h/2.0f - left.h/2; /* text label */ name_len = nk_strlen(name); size = font->width(font->userdata, font->height, name, name_len); label.x = left.x + left.w + style->padding.x; - label.w = (int)size + 2 * style->padding.x; + label.w = (float)size + 2 * style->padding.x; label.y = property.y + style->border + style->padding.y; label.h = property.h - (2 * style->border + 2 * style->padding.y); @@ -27628,13 +27667,21 @@ nk_do_property(nk_flags *ws, nk_itoa(string, variant->value.i); num_len = nk_strlen(string); break; + case NK_PROPERTY_FLOAT: + NK_DTOA(string, (double)variant->value.f); + num_len = nk_string_float_limit(string, NK_MAX_FLOAT_PRECISION); + break; + case NK_PROPERTY_DOUBLE: + NK_DTOA(string, variant->value.d); + num_len = nk_string_float_limit(string, NK_MAX_FLOAT_PRECISION); + break; } size = font->width(font->userdata, font->height, string, num_len); dst = string; length = &num_len; } - edit.w = (int)size + 2 * style->padding.x; + edit.w = (float)size + 2 * style->padding.x; edit.w = NK_MIN(edit.w, right.x - (label.x + label.w)); edit.x = right.x - (edit.w + style->padding.x); edit.y = property.y + style->border; @@ -27661,6 +27708,10 @@ nk_do_property(nk_flags *ws, default: break; case NK_PROPERTY_INT: variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i - variant->step.i, variant->max_value.i); break; + case NK_PROPERTY_FLOAT: + variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f - variant->step.f, variant->max_value.f); break; + case NK_PROPERTY_DOUBLE: + variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d - variant->step.d, variant->max_value.d); break; } } /* execute left button */ @@ -27669,6 +27720,10 @@ nk_do_property(nk_flags *ws, default: break; case NK_PROPERTY_INT: variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i + variant->step.i, variant->max_value.i); break; + case NK_PROPERTY_FLOAT: + variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f + variant->step.f, variant->max_value.f); break; + case NK_PROPERTY_DOUBLE: + variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d + variant->step.d, variant->max_value.d); break; } } if (old != NK_PROPERTY_EDIT && (*state == NK_PROPERTY_EDIT)) { @@ -27713,6 +27768,16 @@ nk_do_property(nk_flags *ws, variant->value.i = nk_strtoi(buffer, 0); variant->value.i = NK_CLAMP(variant->min_value.i, variant->value.i, variant->max_value.i); break; + case NK_PROPERTY_FLOAT: + nk_string_float_limit(buffer, NK_MAX_FLOAT_PRECISION); + variant->value.f = nk_strtof(buffer, 0); + variant->value.f = NK_CLAMP(variant->min_value.f, variant->value.f, variant->max_value.f); + break; + case NK_PROPERTY_DOUBLE: + nk_string_float_limit(buffer, NK_MAX_FLOAT_PRECISION); + variant->value.d = nk_strtod(buffer, 0); + variant->value.d = NK_CLAMP(variant->min_value.d, variant->value.d, variant->max_value.d); + break; } } } @@ -27727,9 +27792,32 @@ nk_property_variant_int(int value, int min_value, int max_value, int step) result.step.i = step; return result; } +NK_LIB struct nk_property_variant +nk_property_variant_float(float value, float min_value, float max_value, float step) +{ + struct nk_property_variant result; + result.kind = NK_PROPERTY_FLOAT; + result.value.f = value; + result.min_value.f = min_value; + result.max_value.f = max_value; + result.step.f = step; + return result; +} +NK_LIB struct nk_property_variant +nk_property_variant_double(double value, double min_value, double max_value, + double step) +{ + struct nk_property_variant result; + result.kind = NK_PROPERTY_DOUBLE; + result.value.d = value; + result.min_value.d = min_value; + result.max_value.d = max_value; + result.step.d = step; + return result; +} NK_LIB void nk_property(struct nk_context *ctx, const char *name, struct nk_property_variant *variant, - int inc_per_pixel, const enum nk_property_filter filter) + float inc_per_pixel, const enum nk_property_filter filter) { struct nk_window *win; struct nk_panel *layout; @@ -27829,7 +27917,7 @@ nk_property(struct nk_context *ctx, const char *name, struct nk_property_variant } NK_API void nk_property_int(struct nk_context *ctx, const char *name, - int min, int *val, int max, int step, int inc_per_pixel) + int min, int *val, int max, int step, float inc_per_pixel) { struct nk_property_variant variant; NK_ASSERT(ctx); @@ -27841,9 +27929,37 @@ nk_property_int(struct nk_context *ctx, const char *name, nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_INT); *val = variant.value.i; } +NK_API void +nk_property_float(struct nk_context *ctx, const char *name, + float min, float *val, float max, float step, float inc_per_pixel) +{ + struct nk_property_variant variant; + NK_ASSERT(ctx); + NK_ASSERT(name); + NK_ASSERT(val); + + if (!ctx || !ctx->current || !name || !val) return; + variant = nk_property_variant_float(*val, min, max, step); + nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_FLOAT); + *val = variant.value.f; +} +NK_API void +nk_property_double(struct nk_context *ctx, const char *name, + double min, double *val, double max, double step, float inc_per_pixel) +{ + struct nk_property_variant variant; + NK_ASSERT(ctx); + NK_ASSERT(name); + NK_ASSERT(val); + + if (!ctx || !ctx->current || !name || !val) return; + variant = nk_property_variant_double(*val, min, max, step); + nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_FLOAT); + *val = variant.value.d; +} NK_API int nk_propertyi(struct nk_context *ctx, const char *name, int min, int val, - int max, int step, int inc_per_pixel) + int max, int step, float inc_per_pixel) { struct nk_property_variant variant; NK_ASSERT(ctx); @@ -27855,31 +27971,31 @@ nk_propertyi(struct nk_context *ctx, const char *name, int min, int val, val = variant.value.i; return val; } -NK_API int -nk_propertyf(struct nk_context *ctx, const char *name, int min, - int val, int max, int step, int inc_per_pixel) +NK_API float +nk_propertyf(struct nk_context *ctx, const char *name, float min, + float val, float max, float step, float inc_per_pixel) { struct nk_property_variant variant; NK_ASSERT(ctx); NK_ASSERT(name); if (!ctx || !ctx->current || !name) return val; - variant = nk_property_variant_int(val, min, max, step); - nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_int); + variant = nk_property_variant_float(val, min, max, step); + nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_FLOAT); val = variant.value.f; return val; } -NK_API int -nk_propertyd(struct nk_context *ctx, const char *name, int min, - int val, int max, int step, int inc_per_pixel) +NK_API double +nk_propertyd(struct nk_context *ctx, const char *name, double min, + double val, double max, double step, float inc_per_pixel) { struct nk_property_variant variant; NK_ASSERT(ctx); NK_ASSERT(name); if (!ctx || !ctx->current || !name) return val; - variant = nk_property_variant_int(val, min, max, step); - nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_int); + variant = nk_property_variant_double(val, min, max, step); + nk_property(ctx, name, &variant, inc_per_pixel, NK_FILTER_FLOAT); val = variant.value.d; return val; } @@ -27896,7 +28012,7 @@ nk_propertyd(struct nk_context *ctx, const char *name, int min, NK_API nk_bool nk_chart_begin_colored(struct nk_context *ctx, enum nk_chart_type type, struct nk_color color, struct nk_color highlight, - int count, int min_value, int max_value) + int count, float min_value, float max_value) { struct nk_window *win; struct nk_chart *chart; @@ -27961,7 +28077,7 @@ nk_chart_begin_colored(struct nk_context *ctx, enum nk_chart_type type, } NK_API nk_bool nk_chart_begin(struct nk_context *ctx, const enum nk_chart_type type, - int count, int min_value, int max_value) + int count, float min_value, float max_value) { return nk_chart_begin_colored(ctx, type, ctx->style.chart.color, ctx->style.chart.selected_color, count, min_value, max_value); @@ -27969,7 +28085,7 @@ nk_chart_begin(struct nk_context *ctx, const enum nk_chart_type type, NK_API void nk_chart_add_slot_colored(struct nk_context *ctx, const enum nk_chart_type type, struct nk_color color, struct nk_color highlight, - int count, int min_value, int max_value) + int count, float min_value, float max_value) { NK_ASSERT(ctx); NK_ASSERT(ctx->current); @@ -27991,14 +28107,14 @@ nk_chart_add_slot_colored(struct nk_context *ctx, const enum nk_chart_type type, } NK_API void nk_chart_add_slot(struct nk_context *ctx, const enum nk_chart_type type, - int count, int min_value, int max_value) + int count, float min_value, float max_value) { nk_chart_add_slot_colored(ctx, type, ctx->style.chart.color, ctx->style.chart.selected_color, count, min_value, max_value); } NK_INTERN nk_flags nk_chart_push_line(struct nk_context *ctx, struct nk_window *win, - struct nk_chart *g, int value, int slot) + struct nk_chart *g, float value, int slot) { struct nk_panel *layout = win->layout; const struct nk_input *i = &ctx->input; @@ -28008,19 +28124,19 @@ nk_chart_push_line(struct nk_context *ctx, struct nk_window *win, struct nk_vec2 cur; struct nk_rect bounds; struct nk_color color; - int step; - int range; - int ratio; + float step; + float range; + float ratio; NK_ASSERT(slot >= 0 && slot < NK_CHART_MAX_SLOT); - step = g->w / (int)g->slots[slot].count; + step = g->w / (float)g->slots[slot].count; range = g->slots[slot].max - g->slots[slot].min; ratio = (value - g->slots[slot].min) / range; if (g->slots[slot].index == 0) { /* first data point does not have a connection */ g->slots[slot].last.x = g->x; - g->slots[slot].last.y = (g->y + g->h) - ratio * (int)g->h; + g->slots[slot].last.y = (g->y + g->h) - ratio * (float)g->h; bounds.x = g->slots[slot].last.x - 2; bounds.y = g->slots[slot].last.y - 2; @@ -28041,9 +28157,9 @@ nk_chart_push_line(struct nk_context *ctx, struct nk_window *win, /* draw a line between the last data point and the new one */ color = g->slots[slot].color; - cur.x = g->x + (int)(step * (int)g->slots[slot].index); - cur.y = (g->y + g->h) - (ratio * (int)g->h); - nk_stroke_line(out, g->slots[slot].last.x, g->slots[slot].last.y, cur.x, cur.y, 1, color); + cur.x = g->x + (float)(step * (float)g->slots[slot].index); + cur.y = (g->y + g->h) - (ratio * (float)g->h); + nk_stroke_line(out, g->slots[slot].last.x, g->slots[slot].last.y, cur.x, cur.y, 1.0f, color); bounds.x = cur.x - 3; bounds.y = cur.y - 3; @@ -28068,13 +28184,13 @@ nk_chart_push_line(struct nk_context *ctx, struct nk_window *win, } NK_INTERN nk_flags nk_chart_push_column(const struct nk_context *ctx, struct nk_window *win, - struct nk_chart *chart, int value, int slot) + struct nk_chart *chart, float value, int slot) { struct nk_command_buffer *out = &win->buffer; const struct nk_input *in = &ctx->input; struct nk_panel *layout = win->layout; - int ratio; + float ratio; nk_flags ret = 0; struct nk_color color; struct nk_rect item = {0,0,0,0}; @@ -28083,8 +28199,8 @@ nk_chart_push_column(const struct nk_context *ctx, struct nk_window *win, if (chart->slots[slot].index >= chart->slots[slot].count) return nk_false; if (chart->slots[slot].count) { - int padding = (int)(chart->slots[slot].count-1); - item.w = (chart->w - padding) / (int)(chart->slots[slot].count); + float padding = (float)(chart->slots[slot].count-1); + item.w = (chart->w - padding) / (float)(chart->slots[slot].count); } /* calculate bounds of current bar chart entry */ @@ -28097,8 +28213,8 @@ nk_chart_push_column(const struct nk_context *ctx, struct nk_window *win, ratio = (value - chart->slots[slot].max) / chart->slots[slot].range; item.y = chart->y + (chart->h * NK_ABS(ratio)) - item.h; } - item.x = chart->x + ((int)chart->slots[slot].index * item.w); - item.x = item.x + ((int)chart->slots[slot].index); + item.x = chart->x + ((float)chart->slots[slot].index * item.w); + item.x = item.x + ((float)chart->slots[slot].index); /* user chart bar selection */ if (!(layout->flags & NK_WINDOW_ROM) && @@ -28113,7 +28229,7 @@ nk_chart_push_column(const struct nk_context *ctx, struct nk_window *win, return ret; } NK_API nk_flags -nk_chart_push_slot(struct nk_context *ctx, int value, int slot) +nk_chart_push_slot(struct nk_context *ctx, float value, int slot) { nk_flags flags; struct nk_window *win; @@ -28139,7 +28255,7 @@ nk_chart_push_slot(struct nk_context *ctx, int value, int slot) return flags; } NK_API nk_flags -nk_chart_push(struct nk_context *ctx, int value) +nk_chart_push(struct nk_context *ctx, float value) { return nk_chart_push_slot(ctx, value, 0); } @@ -28160,12 +28276,12 @@ nk_chart_end(struct nk_context *ctx) return; } NK_API void -nk_plot(struct nk_context *ctx, enum nk_chart_type type, const int *values, +nk_plot(struct nk_context *ctx, enum nk_chart_type type, const float *values, int count, int offset) { int i = 0; - int min_value; - int max_value; + float min_value; + float max_value; NK_ASSERT(ctx); NK_ASSERT(values); @@ -28186,11 +28302,11 @@ nk_plot(struct nk_context *ctx, enum nk_chart_type type, const int *values, } NK_API void nk_plot_function(struct nk_context *ctx, enum nk_chart_type type, void *userdata, - int(*value_getter)(void* user, int index), int count, int offset) + float(*value_getter)(void* user, int index), int count, int offset) { int i = 0; - int min_value; - int max_value; + float min_value; + float max_value; NK_ASSERT(ctx); NK_ASSERT(value_getter); @@ -28198,7 +28314,7 @@ nk_plot_function(struct nk_context *ctx, enum nk_chart_type type, void *userdata max_value = min_value = value_getter(userdata, offset); for (i = 0; i < count; ++i) { - int value = value_getter(userdata, i + offset); + float value = value_getter(userdata, i + offset); min_value = NK_MIN(value, min_value); max_value = NK_MAX(value, max_value); } @@ -28225,7 +28341,7 @@ nk_color_picker_behavior(nk_flags *state, const struct nk_rect *hue_bar, const struct nk_rect *alpha_bar, struct nk_colorf *color, const struct nk_input *in) { - int hsva[4]; + float hsva[4]; nk_bool value_changed = 0; nk_bool hsv_changed = 0; @@ -28238,7 +28354,7 @@ nk_color_picker_behavior(nk_flags *state, nk_colorf_hsva_fv(hsva, *color); if (nk_button_behavior(state, *matrix, in, NK_BUTTON_REPEATER)) { hsva[1] = NK_SATURATE((in->mouse.pos.x - matrix->x) / (matrix->w-1)); - hsva[2] = 1 - NK_SATURATE((in->mouse.pos.y - matrix->y) / (matrix->h-1)); + hsva[2] = 1.0f - NK_SATURATE((in->mouse.pos.y - matrix->y) / (matrix->h-1)); value_changed = hsv_changed = 1; } /* hue bar */ @@ -28249,7 +28365,7 @@ nk_color_picker_behavior(nk_flags *state, /* alpha bar */ if (alpha_bar) { if (nk_button_behavior(state, *alpha_bar, in, NK_BUTTON_REPEATER)) { - hsva[3] = 1 - NK_SATURATE((in->mouse.pos.y - alpha_bar->y) / (alpha_bar->h-1)); + hsva[3] = 1.0f - NK_SATURATE((in->mouse.pos.y - alpha_bar->y) / (alpha_bar->h-1)); value_changed = 1; } } @@ -28280,10 +28396,10 @@ nk_draw_color_picker(struct nk_command_buffer *o, const struct nk_rect *matrix, NK_STORAGE const struct nk_color white = {255, 255, 255, 255}; NK_STORAGE const struct nk_color black_trans = {0,0,0,0}; - const int crosshair_size = 7; + const float crosshair_size = 7.0f; struct nk_color temp; - int hsva[4]; - int line_y; + float hsva[4]; + float line_y; int i; NK_ASSERT(o); @@ -28298,18 +28414,18 @@ nk_draw_color_picker(struct nk_command_buffer *o, const struct nk_rect *matrix, {0,0,255,255}, {255, 0, 255, 255}, {255, 0, 0, 255} }; nk_fill_rect_multi_color(o, - nk_rect(hue_bar->x, hue_bar->y + (int)i * (hue_bar->h/6) + 0, - hue_bar->w, (hue_bar->h/6) + 0), hue_colors[i], hue_colors[i], + nk_rect(hue_bar->x, hue_bar->y + (float)i * (hue_bar->h/6.0f) + 0.5f, + hue_bar->w, (hue_bar->h/6.0f) + 0.5f), hue_colors[i], hue_colors[i], hue_colors[i+1], hue_colors[i+1]); } - line_y = (int)(int)(hue_bar->y + hsva[0] * matrix->h + 0); + line_y = (float)(int)(hue_bar->y + hsva[0] * matrix->h + 0.5f); nk_stroke_line(o, hue_bar->x-1, line_y, hue_bar->x + hue_bar->w + 2, line_y, 1, nk_rgb(255,255,255)); /* draw alpha bar */ if (alpha_bar) { - int alpha = NK_SATURATE(col.a); - line_y = (int)(int)(alpha_bar->y + (1 - alpha) * matrix->h + 0); + float alpha = NK_SATURATE(col.a); + line_y = (float)(int)(alpha_bar->y + (1.0f - alpha) * matrix->h + 0.5f); nk_fill_rect_multi_color(o, *alpha_bar, white, white, black, black); nk_stroke_line(o, alpha_bar->x-1, line_y, alpha_bar->x + alpha_bar->w + 2, @@ -28317,18 +28433,18 @@ nk_draw_color_picker(struct nk_command_buffer *o, const struct nk_rect *matrix, } /* draw color matrix */ - temp = nk_hsv_f(hsva[0], 1, 1); + temp = nk_hsv_f(hsva[0], 1.0f, 1.0f); nk_fill_rect_multi_color(o, *matrix, white, temp, temp, white); nk_fill_rect_multi_color(o, *matrix, black_trans, black_trans, black, black); /* draw cross-hair */ - {struct nk_vec2 p; int S = hsva[1]; int V = hsva[2]; - p.x = (int)(int)(matrix->x + S * matrix->w); - p.y = (int)(int)(matrix->y + (1 - V) * matrix->h); - nk_stroke_line(o, p.x - crosshair_size, p.y, p.x-2, p.y, 1, white); - nk_stroke_line(o, p.x + crosshair_size + 1, p.y, p.x+3, p.y, 1, white); - nk_stroke_line(o, p.x, p.y + crosshair_size + 1, p.x, p.y+3, 1, white); - nk_stroke_line(o, p.x, p.y - crosshair_size, p.x, p.y-2, 1, white);} + {struct nk_vec2 p; float S = hsva[1]; float V = hsva[2]; + p.x = (float)(int)(matrix->x + S * matrix->w); + p.y = (float)(int)(matrix->y + (1.0f - V) * matrix->h); + nk_stroke_line(o, p.x - crosshair_size, p.y, p.x-2, p.y, 1.0f, white); + nk_stroke_line(o, p.x + crosshair_size + 1, p.y, p.x+3, p.y, 1.0f, white); + nk_stroke_line(o, p.x, p.y + crosshair_size + 1, p.x, p.y+3, 1.0f, white); + nk_stroke_line(o, p.x, p.y - crosshair_size, p.x, p.y-2, 1.0f, white);} } NK_LIB nk_bool nk_do_color_picker(nk_flags *state, @@ -28341,7 +28457,7 @@ nk_do_color_picker(nk_flags *state, struct nk_rect matrix; struct nk_rect hue_bar; struct nk_rect alpha_bar; - int bar_w; + float bar_w; NK_ASSERT(out); NK_ASSERT(col); @@ -28743,7 +28859,7 @@ nk_combo_begin_symbol(struct nk_context *ctx, enum nk_symbol_type symbol, struct bounds.x = header.x + style->combo.content_padding.x; bounds.w = (button.x - style->combo.content_padding.y) - bounds.x; nk_draw_symbol(&win->buffer, symbol, bounds, sym_background, symbol_color, - 1, style->font); + 1.0f, style->font); /* draw open/close button */ nk_draw_button_symbol(&win->buffer, &bounds, &content, ctx->last_widget_state, @@ -28843,7 +28959,7 @@ nk_combo_begin_symbol_text(struct nk_context *ctx, const char *selected, int len image.h = header.h - 2 * style->combo.content_padding.y; image.w = image.h; nk_draw_symbol(&win->buffer, symbol, image, text.background, symbol_color, - 1, style->font); + 1.0f, style->font); /* draw label */ text.padding = nk_vec2(0,0); @@ -29126,9 +29242,9 @@ nk_combo(struct nk_context *ctx, const char **items, int count, window_padding = nk_panel_get_padding(&ctx->style, ctx->current->layout->type); max_height = count * item_height + count * (int)item_spacing.y; max_height += (int)item_spacing.y * 2 + (int)window_padding.y * 2; - size.y = NK_MIN(size.y, (int)max_height); + size.y = NK_MIN(size.y, (float)max_height); if (nk_combo_begin_label(ctx, items[selected], size)) { - nk_layout_row_dynamic(ctx, (int)item_height, 1); + nk_layout_row_dynamic(ctx, (float)item_height, 1); for (i = 0; i < count; ++i) { if (nk_combo_item_label(ctx, items[i], NK_TEXT_LEFT)) selected = i; @@ -29159,7 +29275,7 @@ nk_combo_separator(struct nk_context *ctx, const char *items_separated_by_separa window_padding = nk_panel_get_padding(&ctx->style, ctx->current->layout->type); max_height = count * item_height + count * (int)item_spacing.y; max_height += (int)item_spacing.y * 2 + (int)window_padding.y * 2; - size.y = NK_MIN(size.y, (int)max_height); + size.y = NK_MIN(size.y, (float)max_height); /* find selected item */ current_item = items_separated_by_separator; @@ -29173,7 +29289,7 @@ nk_combo_separator(struct nk_context *ctx, const char *items_separated_by_separa if (nk_combo_begin_text(ctx, current_item, length, size)) { current_item = items_separated_by_separator; - nk_layout_row_dynamic(ctx, (int)item_height, 1); + nk_layout_row_dynamic(ctx, (float)item_height, 1); for (i = 0; i < count; ++i) { iter = current_item; while (*iter && *iter != separator) iter++; @@ -29212,11 +29328,11 @@ nk_combo_callback(struct nk_context *ctx, void(*item_getter)(void*, int, const c window_padding = nk_panel_get_padding(&ctx->style, ctx->current->layout->type); max_height = count * item_height + count * (int)item_spacing.y; max_height += (int)item_spacing.y * 2 + (int)window_padding.y * 2; - size.y = NK_MIN(size.y, (int)max_height); + size.y = NK_MIN(size.y, (float)max_height); item_getter(userdata, selected, &item); if (nk_combo_begin_label(ctx, item, size)) { - nk_layout_row_dynamic(ctx, (int)item_height, 1); + nk_layout_row_dynamic(ctx, (float)item_height, 1); for (i = 0; i < count; ++i) { item_getter(userdata, i, &item); if (nk_combo_item_label(ctx, item, NK_TEXT_LEFT)) @@ -29262,7 +29378,7 @@ nk_combobox_callback(struct nk_context *ctx, * * ===============================================================*/ NK_API nk_bool -nk_tooltip_begin(struct nk_context *ctx, int width) +nk_tooltip_begin(struct nk_context *ctx, float width) { int x,y,w,h; struct nk_window *win; @@ -29287,10 +29403,10 @@ nk_tooltip_begin(struct nk_context *ctx, int width) x = nk_ifloorf(in->mouse.pos.x + 1) - (int)win->layout->clip.x; y = nk_ifloorf(in->mouse.pos.y + 1) - (int)win->layout->clip.y; - bounds.x = (int)x; - bounds.y = (int)y; - bounds.w = (int)w; - bounds.h = (int)h; + bounds.x = (float)x; + bounds.y = (float)y; + bounds.w = (float)w; + bounds.h = (float)h; ret = nk_popup_begin(ctx, NK_POPUP_DYNAMIC, "__##Tooltip##__", NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_BORDER, bounds); @@ -29317,8 +29433,8 @@ nk_tooltip(struct nk_context *ctx, const char *text) struct nk_vec2 padding; int text_len; - int text_width; - int text_height; + float text_width; + float text_height; NK_ASSERT(ctx); NK_ASSERT(ctx->current); @@ -29339,8 +29455,8 @@ nk_tooltip(struct nk_context *ctx, const char *text) text_height = (style->font->height + 2 * padding.y); /* execute tooltip and fill with text */ - if (nk_tooltip_begin(ctx, (int)text_width)) { - nk_layout_row_dynamic(ctx, (int)text_height, 1); + if (nk_tooltip_begin(ctx, (float)text_width)) { + nk_layout_row_dynamic(ctx, (float)text_height, 1); nk_text(ctx, text, text_len, NK_TEXT_LEFT); nk_tooltip_end(ctx); } @@ -29421,6 +29537,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// - [yy]: Minor version with non-breaking API and library changes /// - [zz]: Bug fix version with no direct changes to API /// +/// - 2021/09/22 (4.08.5) - GCC __builtin_offsetof only exists in version 4 and later /// - 2021/09/15 (4.08.4) - Fix "'num_len' may be used uninitialized" in nk_do_property /// - 2021/09/15 (4.08.3) - Fix "Templates cannot be declared to have 'C' Linkage" /// - 2021/09/08 (4.08.2) - Fix warnings in C89 builds @@ -29478,8 +29595,8 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// - 2018/01/12 (3.00.2) - Added `nk_group_begin_titled` for separed group identifier and title. /// - 2018/01/07 (3.00.1) - Started to change documentation style. /// - 2018/01/05 (3.00.0) - BREAKING CHANGE: The previous color picker API was broken -/// because of conversions between int and byte color representation. -/// Color pickers now use inting point values to represent +/// because of conversions between float and byte color representation. +/// Color pickers now use floating point values to represent /// HSV values. To get back the old behavior I added some additional /// color conversion functions to cast between nk_color and /// nk_colorf. @@ -29522,11 +29639,11 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// - 2017/05/10 (1.38.3) - Fixed wrong min window size mouse scaling over boundries. /// - 2017/05/09 (1.38.2) - Fixed vertical scrollbar drawing with not enough space. /// - 2017/05/09 (1.38.1) - Fixed scaler dragging behavior if window size hits minimum size. -/// - 2017/05/06 (1.38.0) - Added platform int-click support. +/// - 2017/05/06 (1.38.0) - Added platform double-click support. /// - 2017/04/20 (1.37.1) - Fixed key repeat found inside glfw demo backends. /// - 2017/04/20 (1.37.0) - Extended properties with selection and clipboard support. /// - 2017/04/20 (1.36.2) - Fixed #405 overlapping rows with zero padding and spacing. -/// - 2017/04/09 (1.36.1) - Fixed #403 with another widget int error. +/// - 2017/04/09 (1.36.1) - Fixed #403 with another widget float error. /// - 2017/04/09 (1.36.0) - Added window `NK_WINDOW_NO_INPUT` and `NK_WINDOW_NOT_INTERACTIVE` flags. /// - 2017/04/09 (1.35.3) - Fixed buffer heap corruption. /// - 2017/03/25 (1.35.2) - Fixed popup overlapping for `NK_WINDOW_BACKGROUND` windows. @@ -29672,17 +29789,17 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// hidden and therefore not visible. /// - 2016/08/12 (1.09.1) - nk_window_is_closed now queries the correct flag `NK_WINDOW_CLOSED` /// instead of the old flag `NK_WINDOW_HIDDEN`. -/// - 2016/08/09 (1.09.0) - Added additional int version to nk_property and changed -/// the underlying implementation to not cast to int and instead +/// - 2016/08/09 (1.09.0) - Added additional double version to nk_property and changed +/// the underlying implementation to not cast to float and instead /// work directly on the given values. /// - 2016/08/09 (1.08.0) - Added additional define to overwrite library internal -/// inting pointer number to string conversion for additional +/// floating pointer number to string conversion for additional /// precision. /// - 2016/08/09 (1.08.0) - Added additional define to overwrite library internal -/// string to inting point number conversion for additional +/// string to floating point number conversion for additional /// precision. /// - 2016/08/08 (1.07.2) - Fixed compiling error without define `NK_INCLUDE_FIXED_TYPE`. -/// - 2016/08/08 (1.07.1) - Fixed possible inting point error inside `nk_widget` leading +/// - 2016/08/08 (1.07.1) - Fixed possible floating point error inside `nk_widget` leading /// to wrong wiget width calculation which results in widgets falsly /// becomming tagged as not inside window and cannot be accessed. /// - 2016/08/08 (1.07.0) - Nuklear now differentiates between hiding a window (NK_WINDOW_HIDDEN) and diff --git a/nuklear_quickdraw.h b/nuklear_quickdraw.h index 612ca43..5e635d5 100644 --- a/nuklear_quickdraw.h +++ b/nuklear_quickdraw.h @@ -115,6 +115,7 @@ void NewShockBitmap(ShockBitmap *theMap, short width, short height) { theMap->Address = theMap->BWBits.baseAddr; theMap->RowBytes = (long) theMap->BWBits.rowBytes; theMap->bits = (GrafPtr) &theMap->BWPort; + } ShockBitmap gMainOffScreen; @@ -392,7 +393,7 @@ int widthFor12ptFont[128] = { // TODO: fully convert // TODO: assuming system font for v1, support other fonts in v2 // doing this in a "fast" way by using a precomputed table for a 12pt font -static int nk_quickdraw_font_get_text_width(nk_handle handle, int height, const char *text, int len) { +static float nk_quickdraw_font_get_text_width(nk_handle handle, int height, const char *text, int len) { // // writeSerialPortDebug(boutRefNum, "nk_quickdraw_font_get_text_width"); @@ -408,7 +409,7 @@ static int nk_quickdraw_font_get_text_width(nk_handle handle, int height, const width += widthFor12ptFont[(int)text[i]]; } - return width; + return (float)width; } static int _get_text_width(const char *text, int len) { @@ -533,15 +534,27 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { const struct nk_command *cmd = 0; - if (!lastEventWasKey) { + // if (!lastEventWasKey) { OpenPort(&gMainOffScreen.BWPort); SetPort(&gMainOffScreen.BWPort); SetPortBits(&gMainOffScreen.BWBits); // EraseRect(&gMainOffScreen.bounds); - } else { + + // int theNum; + // GetFNum('Chicago', theNum); + // // do this twice, once now, and once after the port is switched to the offscreen + // TextFont(theNum); + // TextSize(12); + // } else { - SetPort(window); - } + // SetPort(window); + + // int theNum; + // GetFNum('Chicago', theNum); + // // do this twice, once now, and once after the port is switched to the offscreen + // TextFont(theNum); + // TextSize(12); + // } end = TickCount(); total = end - start; @@ -551,34 +564,34 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { nk_foreach(cmd, ctx) { int color; - ForeColor(blackColor); + // ForeColor(blackColor); - if (lastEventWasKey && cmd->type == NK_COMMAND_TEXT) { + // if (lastEventWasKey && cmd->type == NK_COMMAND_TEXT) { - writeSerialPortDebug(boutRefNum, "FAST INPUT"); + // // writeSerialPortDebug(boutRefNum, "FAST INPUT"); - const struct nk_command_text *t = (const struct nk_command_text*)cmd; + // const struct nk_command_text *t = (const struct nk_command_text*)cmd; - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + // #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_TEXT"); - char log[255]; - sprintf(log, "%f: %c, %d", (int)t->height, &t->string, (int)t->length); - // writeSerialPortDebug(boutRefNum, log); - #endif + // // writeSerialPortDebug(boutRefNum, "NK_COMMAND_TEXT"); + // char log[255]; + // sprintf(log, "%f: %c, %d", (int)t->height, &t->string, (int)t->length); + // // writeSerialPortDebug(boutRefNum, log); + // #endif - MoveTo((int)t->x + _get_text_width(t->string, (int)t->length - 1), (int)t->y + (int)t->height); + // MoveTo((int)t->x + _get_text_width(t->string, (int)t->length - 1), (int)t->y + (int)t->height); - // DrawText((const char*)t->string, 0, (int)t->length); + // // DrawText((const char*)t->string, 0, (int)t->length); + // PenSize(1.0, 1.0); + // DrawChar(t->string[t->length - 1]); - DrawChar(t->string[t->length - 1]); - - } else if (!lastEventWasKey) { + // } else if (!lastEventWasKey) { - writeSerialPortDebug(boutRefNum, "SLOW INPUT"); + // writeSerialPortDebug(boutRefNum, "SLOW INPUT"); switch (cmd->type) { case NK_COMMAND_NOP: @@ -904,6 +917,7 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { ForeColor(color); MoveTo((int)t->x, (int)t->y + (int)t->height); + PenSize(1.0, 1.0); DrawText((const char*)t->string, 0, (int)t->length); // DrawChar(t->string[t->length - 1]); @@ -998,7 +1012,7 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { #endif break; } - } + // } } @@ -1009,14 +1023,14 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { - if (!lastEventWasKey) { + // if (!lastEventWasKey) { SetPort(window); // our offscreen bitmap is the same size as our port rectangle, so we // get away with using the portRect sizing for source and destination CopyBits(&gMainOffScreen.bits->portBits, &window->portBits, &window->portRect, &window->portRect, srcCopy, 0L); - } + // } end = TickCount(); total = end - start; @@ -1138,14 +1152,14 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl int key = (int)charKey; - // #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING + #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING writeSerialPortDebug(boutRefNum, "keyDown/autoKey"); char logy[255]; sprintf(logy, "key pressed: key: '%c', 02x: '%02X', return: '%02X', %d == %d ??", key, key, returnKey, (int)(key), (int)(returnKey)); writeSerialPortDebug(boutRefNum, logy); - // #endif + #endif const Boolean isKeyDown = event->what == keyDown; @@ -1269,10 +1283,18 @@ NK_INTERN void nk_quickdraw_clipboard_copy(nk_handle usr, const char *text, int // it us up to our "main" function to call this code NK_API struct nk_context* nk_quickdraw_init(unsigned int width, unsigned int height) { + + int theNum; + GetFNum('Chicago', theNum); + // do this twice, once now, and once after the port is switched to the offscreen buffer + TextFont(theNum); + TextSize(12); // needed to calculate bezier info, see mactech article. setupBezier(); NewShockBitmap(&gMainOffScreen, width, height); + TextFont(theNum); + TextSize(12); NkQuickDrawFont *quickdrawfont = nk_quickdraw_font_create_from_file(); struct nk_user_font *font = &quickdrawfont->nk; diff --git a/output_js b/output_js index f3db40c..85a99df 100644 --- a/output_js +++ b/output_js @@ -12,25 +12,18 @@ const defaultOptions = { }, query: { fetchPolicy: 'no-cache', - errorPolicy: 'all', + errorPolicy: 'ignore', }, } -const client = new ApolloClient({ - uri: 'http://10.0.1.167:4000/', - cache: new InMemoryCache(), - link: new createHttpLink({ - uri: 'http://10.0.1.167:4000/' - }), - defaultOptions -}); +let client class iMessageClient { async getMessages (chatId, page) { - console.log(`get messages for caht ID: ${chatId}`) + console.log(`get messages for chat ID: ${chatId}`) let result = await client.query({ query: gql`query getMessages { @@ -57,8 +50,10 @@ class iMessageClient { for (const message of messages) { if (firstMessage) { + messageOutput = `${message.chatter}: ${message.text}` } else { + messageOutput = `${messageOutput}ENDLASTMESSAGE${message.chatter}: ${message.text}` } @@ -71,7 +66,7 @@ class iMessageClient { async sendMessage (chatId, message) { - console.log(`send messages for caht ID: ${chatId} ${message}`) + console.log(`send messages for chat ID: ${chatId} ${message}`) let result = await client.query({ query: gql`query sendMessage { @@ -82,11 +77,9 @@ class iMessageClient { }` }) - let messages = result.data.getMessages + let messages = result.data.sendMessage let messageOutput = `` const maxPerLine = 20000 - console.log(`return messages from send messages:`) - console.log(messages) let firstMessage = true @@ -98,9 +91,11 @@ class iMessageClient { for (const message of messages) { if (firstMessage) { - messageOutput = `${message.chatter}: ` + + messageOutput = `${message.chatter}: ${message.text}` } else { - messageOutput = `${messageOutput}ENDLASTMESSAGE${message.chatter}: ` + + messageOutput = `${messageOutput}ENDLASTMESSAGE${message.chatter}: ${message.text}` } firstMessage = false @@ -137,6 +132,28 @@ class iMessageClient { return friendlyNameStrings } + + setIPAddress (IPAddress) { + + try { + + client = new ApolloClient({ + uri: `${IPAddress}:4000/`, + cache: new InMemoryCache(), + link: new createHttpLink({ + uri: `${IPAddress}:4000/` + }), + defaultOptions + }); + } catch (err) { + console.log(`error instantiating the ApolloClient`) + console.log(err) + + return `failure` + } + + return `success` + } } module.exports = iMessageClient diff --git a/output_js.h b/output_js.h index d469a7b..15df212 100644 --- a/output_js.h +++ b/output_js.h @@ -35,800 +35,449 @@ unsigned char OUTPUT_JS[] = { 0x63, 0x68, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x20, 0x27, 0x6e, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x3a, 0x20, 0x27, 0x61, 0x6c, 0x6c, 0x27, 0x2c, 0x0a, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x7d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, - 0x20, 0x41, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x75, 0x72, 0x69, 0x3a, 0x20, 0x27, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x30, 0x2e, 0x30, 0x2e, - 0x31, 0x2e, 0x31, 0x36, 0x37, 0x3a, 0x34, 0x30, 0x30, 0x30, 0x2f, 0x27, - 0x2c, 0x0a, 0x20, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x3a, 0x20, 0x6e, - 0x65, 0x77, 0x20, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x28, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x6c, 0x69, - 0x6e, 0x6b, 0x3a, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x28, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x69, 0x3a, 0x20, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, - 0x2e, 0x31, 0x36, 0x37, 0x3a, 0x34, 0x30, 0x30, 0x30, 0x2f, 0x27, 0x0a, - 0x20, 0x20, 0x7d, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x7d, - 0x29, 0x3b, 0x0a, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x69, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, - 0x20, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x20, 0x28, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x2c, 0x20, 0x70, 0x61, - 0x67, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, - 0x67, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x68, 0x74, 0x20, 0x49, 0x44, - 0x3a, 0x20, 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x7d, 0x60, - 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, - 0x74, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x3a, 0x20, 0x67, 0x71, 0x6c, 0x60, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x20, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x28, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x3a, 0x20, - 0x22, 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x7d, 0x22, 0x2c, - 0x20, 0x70, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x22, 0x24, 0x7b, 0x70, 0x61, - 0x67, 0x65, 0x7d, 0x22, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x60, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, - 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x3d, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, - 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, - 0x20, 0x3d, 0x20, 0x32, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, - 0x28, 0x60, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x67, - 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x3a, - 0x60, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, - 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x60, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, + 0x79, 0x3a, 0x20, 0x27, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x27, 0x2c, + 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x7d, 0x0a, 0x0a, 0x6c, 0x65, 0x74, + 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x0a, 0x0a, 0x0a, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x20, 0x69, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, + 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x28, 0x63, 0x68, 0x61, 0x74, 0x49, + 0x64, 0x2c, 0x20, 0x70, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x67, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, + 0x61, 0x74, 0x20, 0x49, 0x44, 0x3a, 0x20, 0x24, 0x7b, 0x63, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x7d, 0x60, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, + 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x28, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x3a, 0x20, 0x67, + 0x71, 0x6c, 0x60, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x67, 0x65, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x28, 0x63, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x3a, 0x20, 0x22, 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x7d, 0x22, 0x2c, 0x20, 0x70, 0x61, 0x67, 0x65, 0x3a, 0x20, + 0x22, 0x24, 0x7b, 0x70, 0x61, 0x67, 0x65, 0x7d, 0x22, 0x29, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, + 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x50, 0x65, + 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x67, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x3a, 0x60, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x29, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72, + 0x75, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x21, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x29, 0x20, 0x7b, + 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x29, + 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x7d, 0x3a, 0x20, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, - 0x20, 0x60, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, 0x72, 0x7d, 0x3a, 0x20, 0x24, 0x7b, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x74, 0x65, 0x78, 0x74, - 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x7d, 0x45, - 0x4e, 0x44, 0x4c, 0x41, 0x53, 0x54, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, - 0x45, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x74, 0x65, 0x72, 0x7d, 0x3a, 0x20, 0x24, 0x7b, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x7d, - 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x0a, 0x20, 0x20, - 0x7d, 0x0a, 0x0a, 0x0a, 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, - 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, - 0x28, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x2c, 0x20, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, - 0x28, 0x60, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x68, 0x74, - 0x20, 0x49, 0x44, 0x3a, 0x20, 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x7d, 0x20, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x7d, 0x60, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x3a, 0x20, 0x67, 0x71, 0x6c, 0x60, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x3a, 0x20, 0x22, 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x7d, - 0x22, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x20, - 0x22, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x7d, 0x22, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x65, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x60, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x7d, 0x45, 0x4e, 0x44, 0x4c, 0x41, 0x53, + 0x54, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x24, 0x7b, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x7d, 0x3a, 0x20, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x0a, 0x20, + 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x28, 0x63, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, + 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x73, 0x65, 0x6e, + 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x63, 0x68, 0x61, 0x74, 0x20, 0x49, 0x44, 0x3a, 0x20, + 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x7d, 0x20, 0x24, 0x7b, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x7d, 0x60, 0x29, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x28, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x3a, 0x20, 0x67, 0x71, 0x6c, 0x60, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x20, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x28, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x3a, 0x20, 0x22, 0x24, 0x7b, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x7d, 0x22, 0x2c, 0x20, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x22, 0x24, 0x7b, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x7d, 0x22, 0x29, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x60, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x60, 0x60, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, - 0x78, 0x50, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x32, - 0x30, 0x30, 0x30, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x3a, 0x60, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x67, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, - 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x20, 0x3d, 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x72, 0x4c, + 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x32, 0x30, 0x30, 0x30, 0x30, 0x0a, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x20, 0x28, 0x21, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x29, + 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x60, 0x24, - 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x7d, 0x3a, 0x20, 0x60, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, - 0x60, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x7d, 0x45, 0x4e, 0x44, 0x4c, 0x41, 0x53, 0x54, - 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x24, 0x7b, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x7d, 0x3a, 0x20, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, + 0x69, 0x66, 0x20, 0x28, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x7d, 0x3a, 0x20, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x7d, 0x60, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, + 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x20, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x20, 0x28, - 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x3a, 0x20, 0x67, 0x71, 0x6c, 0x60, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x73, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, - 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, - 0x20, 0x63, 0x68, 0x61, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x74, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, - 0x74, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, - 0x60, 0x60, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x21, 0x63, 0x68, 0x61, 0x74, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x74, 0x20, 0x63, - 0x68, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x74, 0x73, - 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, - 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, - 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x7d, 0x2c, 0x24, 0x7b, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x28, 0x2f, 0x2c, 0x2f, 0x67, 0x2c, 0x20, 0x27, 0x27, 0x29, 0x7d, 0x60, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x72, - 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x28, 0x31, 0x2c, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, - 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x69, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x0a, 0x0a, 0x26, - 0x26, 0x26, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6a, - 0x73, 0x6f, 0x6e, 0x40, 0x40, 0x40, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x65, 0x73, 0x74, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x2e, 0x6a, 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x74, 0x65, 0x73, 0x74, 0x22, 0x3a, 0x20, 0x22, - 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x22, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x49, 0x53, 0x43, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, - 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x31, 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, - 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x33, 0x2e, 0x31, 0x2e, - 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x22, 0x0a, 0x20, 0x20, 0x7d, - 0x0a, 0x7d, 0x0a, 0x26, 0x26, 0x26, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x2d, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x6a, 0x73, 0x6f, 0x6e, - 0x40, 0x40, 0x40, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x22, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x22, 0x6c, 0x6f, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x32, 0x2c, 0x0a, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x7d, 0x45, 0x4e, 0x44, 0x4c, + 0x41, 0x53, 0x54, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x24, 0x7b, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x7d, 0x3a, 0x20, 0x24, 0x7b, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x7d, 0x60, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x0a, + 0x20, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x67, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x73, 0x20, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x28, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x3a, 0x20, 0x67, 0x71, 0x6c, 0x60, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, + 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x73, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x68, 0x61, 0x74, 0x73, + 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x74, 0x20, 0x66, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x60, 0x60, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x63, 0x68, 0x61, 0x74, 0x73, + 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x60, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x28, 0x6c, 0x65, 0x74, 0x20, 0x63, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x63, 0x68, 0x61, 0x74, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, + 0x20, 0x3d, 0x20, 0x60, 0x24, 0x7b, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x7d, 0x2c, 0x24, 0x7b, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x66, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x2f, 0x2c, 0x2f, 0x67, 0x2c, + 0x20, 0x27, 0x27, 0x29, 0x7d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x6c, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x31, 0x2c, + 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, + 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x74, 0x49, + 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x28, 0x49, 0x50, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x20, 0x7b, 0x0a, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, + 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x69, 0x3a, 0x20, 0x60, 0x24, + 0x7b, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x3a, + 0x34, 0x30, 0x30, 0x30, 0x2f, 0x60, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x3a, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x28, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x3a, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, + 0x4c, 0x69, 0x6e, 0x6b, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x69, 0x3a, 0x20, 0x60, 0x24, + 0x7b, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x3a, + 0x34, 0x30, 0x30, 0x30, 0x2f, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x63, 0x61, + 0x74, 0x63, 0x68, 0x20, 0x28, 0x65, 0x72, 0x72, 0x29, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x60, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x6c, 0x6f, 0x67, 0x28, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, + 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x60, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x60, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x60, + 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x3d, + 0x20, 0x69, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x0a, 0x0a, 0x26, 0x26, 0x26, 0x0a, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x6a, 0x73, 0x6f, 0x6e, 0x40, 0x40, 0x40, + 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, + 0x20, 0x22, 0x74, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, + 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, + 0x22, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, + 0x3a, 0x20, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x6a, 0x73, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x65, + 0x73, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x2c, + 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x22, 0x3a, + 0x20, 0x22, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x6c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x49, 0x53, 0x43, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, + 0x73, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x39, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, + 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, + 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x35, 0x2e, + 0x31, 0x37, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x72, + 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, + 0x61, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x31, 0x32, 0x2e, + 0x35, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x26, 0x26, 0x26, + 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2d, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x6a, 0x73, 0x6f, 0x6e, 0x40, 0x40, 0x40, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, - 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x3a, - 0x20, 0x22, 0x49, 0x53, 0x43, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, - 0x34, 0x2e, 0x39, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, - 0x74, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x35, 0x2e, 0x31, - 0x37, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x36, 0x2e, 0x39, 0x2e, 0x31, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, - 0x2d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x31, 0x36, 0x2e, 0x39, 0x2e, - 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, - 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x51, - 0x70, 0x4c, 0x63, 0x58, 0x39, 0x5a, 0x53, 0x73, 0x71, 0x33, 0x59, 0x59, - 0x55, 0x55, 0x6e, 0x44, 0x33, 0x6e, 0x46, 0x44, 0x59, 0x38, 0x48, 0x37, - 0x77, 0x63, 0x74, 0x41, 0x68, 0x51, 0x6a, 0x2f, 0x54, 0x46, 0x4b, 0x4c, - 0x38, 0x59, 0x61, 0x38, 0x76, 0x35, 0x66, 0x4d, 0x6d, 0x33, 0x43, 0x46, - 0x58, 0x78, 0x6f, 0x38, 0x7a, 0x53, 0x74, 0x73, 0x4c, 0x41, 0x6c, 0x37, - 0x38, 0x30, 0x6c, 0x74, 0x6f, 0x59, 0x6f, 0x6f, 0x31, 0x57, 0x76, 0x4b, - 0x55, 0x56, 0x47, 0x42, 0x51, 0x4b, 0x2b, 0x31, 0x69, 0x66, 0x72, 0x37, - 0x67, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, - 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, - 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x30, - 0x2e, 0x38, 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, - 0x32, 0x2d, 0x66, 0x62, 0x46, 0x36, 0x6f, 0x54, 0x64, 0x34, 0x73, 0x47, - 0x47, 0x79, 0x30, 0x78, 0x6a, 0x48, 0x50, 0x4b, 0x41, 0x74, 0x2b, 0x65, - 0x53, 0x32, 0x43, 0x72, 0x78, 0x4a, 0x33, 0x2b, 0x36, 0x67, 0x51, 0x33, - 0x46, 0x47, 0x63, 0x42, 0x6f, 0x49, 0x4a, 0x52, 0x32, 0x54, 0x4c, 0x41, - 0x79, 0x43, 0x6b, 0x43, 0x79, 0x49, 0x38, 0x4a, 0x71, 0x5a, 0x4e, 0x79, - 0x2b, 0x46, 0x65, 0x4f, 0x4e, 0x30, 0x41, 0x68, 0x56, 0x67, 0x4e, 0x4a, - 0x6f, 0x55, 0x75, 0x6d, 0x56, 0x6f, 0x5a, 0x51, 0x6a, 0x42, 0x46, 0x55, - 0x71, 0x48, 0x6b, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x40, 0x77, 0x72, - 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, + 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x2e, + 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x6c, 0x6f, 0x63, 0x6b, 0x66, + 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, + 0x20, 0x32, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x0a, + 0x20, 0x20, 0x22, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6c, 0x69, 0x63, + 0x65, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x49, 0x53, 0x43, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, + 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, + 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, + 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, 0x22, + 0x5e, 0x31, 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x72, 0x6f, 0x73, 0x73, + 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x33, + 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, + 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x31, 0x32, + 0x2e, 0x35, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, + 0x36, 0x2e, 0x39, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, + 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x2d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, + 0x2d, 0x31, 0x36, 0x2e, 0x39, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, + 0x61, 0x35, 0x31, 0x32, 0x2d, 0x51, 0x70, 0x4c, 0x63, 0x58, 0x39, 0x5a, + 0x53, 0x73, 0x71, 0x33, 0x59, 0x59, 0x55, 0x55, 0x6e, 0x44, 0x33, 0x6e, + 0x46, 0x44, 0x59, 0x38, 0x48, 0x37, 0x77, 0x63, 0x74, 0x41, 0x68, 0x51, + 0x6a, 0x2f, 0x54, 0x46, 0x4b, 0x4c, 0x38, 0x59, 0x61, 0x38, 0x76, 0x35, + 0x66, 0x4d, 0x6d, 0x33, 0x43, 0x46, 0x58, 0x78, 0x6f, 0x38, 0x7a, 0x53, + 0x74, 0x73, 0x4c, 0x41, 0x6c, 0x37, 0x38, 0x30, 0x6c, 0x74, 0x6f, 0x59, + 0x6f, 0x6f, 0x31, 0x57, 0x76, 0x4b, 0x55, 0x56, 0x47, 0x42, 0x51, 0x4b, + 0x2b, 0x31, 0x69, 0x66, 0x72, 0x37, 0x67, 0x3d, 0x3d, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, - 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, + 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, - 0x67, 0x2f, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x2d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, - 0x35, 0x31, 0x32, 0x2d, 0x4c, 0x72, 0x4b, 0x56, 0x4c, 0x6f, 0x76, 0x65, - 0x2f, 0x7a, 0x77, 0x36, 0x68, 0x32, 0x4d, 0x64, 0x2f, 0x4b, 0x5a, 0x79, - 0x57, 0x78, 0x49, 0x6b, 0x46, 0x4d, 0x36, 0x41, 0x6f, 0x79, 0x4b, 0x70, - 0x37, 0x31, 0x4f, 0x71, 0x70, 0x48, 0x39, 0x48, 0x69, 0x69, 0x70, 0x31, - 0x63, 0x73, 0x6a, 0x50, 0x56, 0x6f, 0x44, 0x33, 0x74, 0x50, 0x78, 0x6c, - 0x62, 0x51, 0x55, 0x4e, 0x78, 0x45, 0x6e, 0x48, 0x45, 0x4e, 0x6b, 0x73, - 0x33, 0x55, 0x47, 0x67, 0x4e, 0x70, 0x53, 0x42, 0x43, 0x41, 0x66, 0x71, - 0x39, 0x4b, 0x57, 0x75, 0x61, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x3e, - 0x3d, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x73, 0x2f, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x31, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, - 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x2f, 0x2d, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2d, - 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, - 0x35, 0x31, 0x32, 0x2d, 0x6d, 0x77, 0x45, 0x56, 0x42, 0x44, 0x55, 0x56, - 0x4f, 0x44, 0x6c, 0x73, 0x51, 0x51, 0x35, 0x64, 0x66, 0x75, 0x4c, 0x55, - 0x53, 0x35, 0x2f, 0x54, 0x66, 0x37, 0x6a, 0x71, 0x55, 0x4b, 0x79, 0x68, - 0x4b, 0x59, 0x48, 0x6d, 0x56, 0x69, 0x34, 0x66, 0x50, 0x42, 0x36, 0x62, - 0x44, 0x4d, 0x4f, 0x66, 0x57, 0x76, 0x55, 0x50, 0x4a, 0x6d, 0x4b, 0x67, - 0x53, 0x31, 0x5a, 0x37, 0x5a, 0x61, 0x2f, 0x73, 0x4f, 0x49, 0x33, 0x76, - 0x7a, 0x57, 0x74, 0x34, 0x2b, 0x4f, 0x37, 0x79, 0x43, 0x69, 0x4c, 0x2f, - 0x37, 0x30, 0x4d, 0x6f, 0x67, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x67, 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, + 0x2d, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x30, 0x2e, 0x38, 0x2e, 0x33, 0x2e, 0x74, + 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, + 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x66, 0x62, 0x46, 0x36, + 0x6f, 0x54, 0x64, 0x34, 0x73, 0x47, 0x47, 0x79, 0x30, 0x78, 0x6a, 0x48, + 0x50, 0x4b, 0x41, 0x74, 0x2b, 0x65, 0x53, 0x32, 0x43, 0x72, 0x78, 0x4a, + 0x33, 0x2b, 0x36, 0x67, 0x51, 0x33, 0x46, 0x47, 0x63, 0x42, 0x6f, 0x49, + 0x4a, 0x52, 0x32, 0x54, 0x4c, 0x41, 0x79, 0x43, 0x6b, 0x43, 0x79, 0x49, + 0x38, 0x4a, 0x71, 0x5a, 0x4e, 0x79, 0x2b, 0x46, 0x65, 0x4f, 0x4e, 0x30, + 0x41, 0x68, 0x56, 0x67, 0x4e, 0x4a, 0x6f, 0x55, 0x75, 0x6d, 0x56, 0x6f, + 0x5a, 0x51, 0x6a, 0x42, 0x46, 0x55, 0x71, 0x48, 0x6b, 0x77, 0x3d, 0x3d, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, + 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, + 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x77, 0x72, 0x79, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x2d, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x34, + 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, + 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x4c, 0x72, + 0x4b, 0x56, 0x4c, 0x6f, 0x76, 0x65, 0x2f, 0x7a, 0x77, 0x36, 0x68, 0x32, + 0x4d, 0x64, 0x2f, 0x4b, 0x5a, 0x79, 0x57, 0x78, 0x49, 0x6b, 0x46, 0x4d, + 0x36, 0x41, 0x6f, 0x79, 0x4b, 0x70, 0x37, 0x31, 0x4f, 0x71, 0x70, 0x48, + 0x39, 0x48, 0x69, 0x69, 0x70, 0x31, 0x63, 0x73, 0x6a, 0x50, 0x56, 0x6f, + 0x44, 0x33, 0x74, 0x50, 0x78, 0x6c, 0x62, 0x51, 0x55, 0x4e, 0x78, 0x45, + 0x6e, 0x48, 0x45, 0x4e, 0x6b, 0x73, 0x33, 0x55, 0x47, 0x67, 0x4e, 0x70, + 0x53, 0x42, 0x43, 0x41, 0x66, 0x71, 0x39, 0x4b, 0x57, 0x75, 0x61, 0x67, + 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, - 0x2e, 0x39, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, - 0x6f, 0x73, 0x74, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x39, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x40, 0x77, + 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, + 0x31, 0x2e, 0x31, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, + 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x2d, 0x2f, 0x65, 0x71, 0x75, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2d, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x30, 0x35, - 0x79, 0x35, 0x42, 0x4b, 0x63, 0x44, 0x61, 0x61, 0x38, 0x77, 0x34, 0x37, - 0x66, 0x38, 0x64, 0x38, 0x31, 0x55, 0x56, 0x77, 0x4b, 0x71, 0x72, 0x41, - 0x6a, 0x6e, 0x38, 0x75, 0x4b, 0x4c, 0x76, 0x36, 0x51, 0x4d, 0x39, 0x66, - 0x4e, 0x64, 0x6c, 0x64, 0x6f, 0x4e, 0x7a, 0x51, 0x2b, 0x72, 0x6e, 0x4f, - 0x48, 0x67, 0x46, 0x6c, 0x6e, 0x72, 0x79, 0x53, 0x55, 0x5a, 0x52, 0x7a, - 0x39, 0x51, 0x49, 0x54, 0x33, 0x76, 0x50, 0x66, 0x74, 0x51, 0x6b, 0x45, - 0x7a, 0x32, 0x55, 0x45, 0x41, 0x53, 0x70, 0x31, 0x4d, 0x69, 0x35, 0x67, + 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6d, 0x77, + 0x45, 0x56, 0x42, 0x44, 0x55, 0x56, 0x4f, 0x44, 0x6c, 0x73, 0x51, 0x51, + 0x35, 0x64, 0x66, 0x75, 0x4c, 0x55, 0x53, 0x35, 0x2f, 0x54, 0x66, 0x37, + 0x6a, 0x71, 0x55, 0x4b, 0x79, 0x68, 0x4b, 0x59, 0x48, 0x6d, 0x56, 0x69, + 0x34, 0x66, 0x50, 0x42, 0x36, 0x62, 0x44, 0x4d, 0x4f, 0x66, 0x57, 0x76, + 0x55, 0x50, 0x4a, 0x6d, 0x4b, 0x67, 0x53, 0x31, 0x5a, 0x37, 0x5a, 0x61, + 0x2f, 0x73, 0x4f, 0x49, 0x33, 0x76, 0x7a, 0x57, 0x74, 0x34, 0x2b, 0x4f, + 0x37, 0x79, 0x43, 0x69, 0x4c, 0x2f, 0x37, 0x30, 0x4d, 0x6f, 0x67, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x35, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, - 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, - 0x2e, 0x30, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x31, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x32, 0x2e, 0x34, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, - 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, - 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, - 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, - 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, - 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, - 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, - 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x2e, - 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, - 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x31, 0x58, 0x6f, - 0x44, 0x79, 0x38, 0x6b, 0x4a, 0x6e, 0x79, 0x57, 0x59, 0x2f, 0x69, 0x2f, - 0x2b, 0x67, 0x4c, 0x54, 0x45, 0x62, 0x59, 0x4c, 0x6e, 0x6f, 0x69, 0x56, - 0x74, 0x53, 0x38, 0x79, 0x37, 0x69, 0x6b, 0x42, 0x72, 0x2f, 0x49, 0x66, - 0x6d, 0x4d, 0x4c, 0x34, 0x51, 0x62, 0x2b, 0x43, 0x4d, 0x37, 0x64, 0x45, - 0x45, 0x62, 0x49, 0x55, 0x4f, 0x6a, 0x6e, 0x59, 0x37, 0x31, 0x36, 0x57, - 0x71, 0x6d, 0x5a, 0x2f, 0x55, 0x70, 0x58, 0x49, 0x78, 0x54, 0x66, 0x4a, - 0x73, 0x59, 0x37, 0x72, 0x4d, 0x63, 0x71, 0x69, 0x43, 0x58, 0x41, 0x3d, - 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, - 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, - 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, - 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, - 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, - 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, - 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2f, 0x2d, 0x2f, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, - 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2d, 0x31, 0x2e, 0x36, 0x2e, - 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, - 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x4c, - 0x38, 0x70, 0x54, 0x6f, 0x54, 0x57, 0x2f, 0x2b, 0x58, 0x72, 0x75, 0x32, - 0x46, 0x46, 0x41, 0x68, 0x6b, 0x5a, 0x31, 0x4f, 0x41, 0x39, 0x71, 0x34, - 0x56, 0x34, 0x6e, 0x75, 0x76, 0x66, 0x6f, 0x50, 0x65, 0x63, 0x42, 0x4d, - 0x33, 0x34, 0x44, 0x65, 0x63, 0x41, 0x75, 0x67, 0x55, 0x5a, 0x45, 0x42, - 0x68, 0x49, 0x32, 0x48, 0x6d, 0x70, 0x67, 0x6e, 0x7a, 0x71, 0x32, 0x68, - 0x54, 0x4b, 0x5a, 0x36, 0x30, 0x4c, 0x41, 0x4d, 0x72, 0x6c, 0x71, 0x69, - 0x41, 0x53, 0x6d, 0x30, 0x61, 0x71, 0x41, 0x59, 0x36, 0x46, 0x38, 0x2f, - 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, - 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, - 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, - 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, - 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, - 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, - 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, - 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, - 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, - 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, - 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, - 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, - 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x2d, 0x2f, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x2d, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x30, 0x2e, 0x74, 0x67, 0x7a, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, - 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6a, 0x69, 0x50, 0x6c, 0x4d, 0x54, - 0x4e, 0x36, 0x2f, 0x35, 0x43, 0x6a, 0x5a, 0x70, 0x4a, 0x4f, 0x6b, 0x47, - 0x65, 0x55, 0x56, 0x30, 0x6d, 0x62, 0x34, 0x7a, 0x78, 0x78, 0x33, 0x33, - 0x75, 0x58, 0x57, 0x64, 0x6a, 0x2f, 0x78, 0x51, 0x43, 0x66, 0x41, 0x4d, - 0x6b, 0x75, 0x4e, 0x41, 0x43, 0x33, 0x48, 0x4e, 0x37, 0x43, 0x76, 0x59, - 0x44, 0x79, 0x4d, 0x48, 0x48, 0x45, 0x7a, 0x6d, 0x63, 0x51, 0x35, 0x47, - 0x56, 0x31, 0x32, 0x4c, 0x73, 0x7a, 0x57, 0x6f, 0x51, 0x2f, 0x56, 0x6c, - 0x78, 0x45, 0x54, 0x32, 0x34, 0x43, 0x74, 0x41, 0x3d, 0x3d, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, - 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, - 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, - 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x34, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x30, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, - 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, - 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, - 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, - 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, - 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, - 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, - 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2f, 0x2d, - 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, - 0x2d, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, - 0x61, 0x35, 0x31, 0x32, 0x2d, 0x70, 0x36, 0x37, 0x43, 0x4d, 0x45, 0x46, - 0x50, 0x37, 0x6b, 0x4f, 0x47, 0x31, 0x4a, 0x5a, 0x30, 0x5a, 0x6b, 0x59, - 0x5a, 0x77, 0x52, 0x44, 0x61, 0x33, 0x36, 0x39, 0x77, 0x35, 0x50, 0x49, - 0x6a, 0x74, 0x4d, 0x6a, 0x76, 0x72, 0x51, 0x64, 0x2f, 0x48, 0x6e, 0x49, - 0x56, 0x38, 0x46, 0x52, 0x73, 0x48, 0x52, 0x71, 0x4c, 0x71, 0x4b, 0x2b, - 0x6f, 0x41, 0x5a, 0x51, 0x6e, 0x46, 0x61, 0x31, 0x44, 0x44, 0x64, 0x5a, - 0x74, 0x4f, 0x74, 0x48, 0x54, 0x69, 0x2b, 0x61, 0x4d, 0x49, 0x57, 0x36, - 0x45, 0x61, 0x74, 0x43, 0x32, 0x6a, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x30, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, - 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, - 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, - 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, - 0x38, 0x2e, 0x32, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, - 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x33, 0x20, 0x7c, - 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x33, 0x20, 0x7c, 0x7c, - 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, - 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, - 0x2e, 0x31, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2f, 0x2d, 0x2f, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x33, - 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6a, 0x41, - 0x5a, 0x4f, 0x4f, 0x61, 0x68, 0x4a, 0x55, 0x36, 0x62, 0x77, 0x53, 0x71, - 0x62, 0x32, 0x5a, 0x79, 0x73, 0x6b, 0x45, 0x4b, 0x31, 0x58, 0x64, 0x67, - 0x55, 0x59, 0x39, 0x6e, 0x6b, 0x6d, 0x65, 0x63, 0x6c, 0x43, 0x72, 0x57, - 0x37, 0x47, 0x64, 0x64, 0x68, 0x31, 0x75, 0x61, 0x73, 0x48, 0x56, 0x71, - 0x6d, 0x6f, 0x59, 0x63, 0x34, 0x43, 0x4b, 0x64, 0x62, 0x30, 0x2f, 0x48, - 0x30, 0x59, 0x31, 0x4a, 0x39, 0x6c, 0x76, 0x61, 0x58, 0x4b, 0x6c, 0x65, - 0x32, 0x57, 0x73, 0x77, 0x2f, 0x5a, 0x78, 0x31, 0x41, 0x79, 0x55, 0x67, - 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, - 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, - 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, - 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, - 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, - 0x74, 0x70, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x31, 0x2e, - 0x35, 0x2e, 0x31, 0x37, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, - 0x32, 0x2d, 0x75, 0x57, 0x63, 0x71, 0x41, 0x6f, 0x74, 0x62, 0x77, 0x44, - 0x45, 0x55, 0x2f, 0x39, 0x2b, 0x44, 0x6d, 0x39, 0x65, 0x31, 0x2f, 0x63, - 0x6c, 0x4f, 0x37, 0x68, 0x54, 0x42, 0x32, 0x6b, 0x51, 0x2f, 0x39, 0x34, - 0x4a, 0x59, 0x63, 0x47, 0x6f, 0x75, 0x42, 0x56, 0x4c, 0x6a, 0x6f, 0x4b, - 0x6d, 0x54, 0x65, 0x4a, 0x54, 0x55, 0x50, 0x51, 0x4b, 0x63, 0x4a, 0x47, - 0x70, 0x50, 0x77, 0x55, 0x6a, 0x5a, 0x63, 0x53, 0x71, 0x67, 0x59, 0x69, - 0x63, 0x62, 0x46, 0x71, 0x51, 0x53, 0x6f, 0x4a, 0x49, 0x57, 0x30, 0x79, - 0x72, 0x46, 0x76, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x32, 0x2e, - 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, - 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, - 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, - 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, - 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, - 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, - 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x2d, - 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, - 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2d, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, - 0x61, 0x35, 0x31, 0x32, 0x2d, 0x32, 0x74, 0x49, 0x68, 0x4f, 0x49, 0x72, - 0x6e, 0x61, 0x46, 0x34, 0x55, 0x62, 0x51, 0x48, 0x66, 0x37, 0x6b, 0x6a, - 0x65, 0x51, 0x41, 0x2f, 0x45, 0x6d, 0x53, 0x6f, 0x72, 0x42, 0x37, 0x2b, - 0x48, 0x79, 0x4a, 0x49, 0x49, 0x72, 0x55, 0x6a, 0x4a, 0x4f, 0x4b, 0x42, - 0x67, 0x6e, 0x58, 0x77, 0x75, 0x65, 0x78, 0x69, 0x38, 0x61, 0x4d, 0x65, - 0x63, 0x52, 0x6c, 0x71, 0x54, 0x49, 0x44, 0x57, 0x63, 0x79, 0x56, 0x58, - 0x43, 0x65, 0x71, 0x4c, 0x68, 0x55, 0x6e, 0x7a, 0x74, 0x4d, 0x61, 0x36, - 0x62, 0x4f, 0x48, 0x2f, 0x6a, 0x54, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, - 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, + 0x6f, 0x6f, 0x73, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, + 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, + 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x2f, 0x2d, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, + 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x30, 0x35, 0x79, 0x35, 0x42, 0x4b, 0x63, 0x44, + 0x61, 0x61, 0x38, 0x77, 0x34, 0x37, 0x66, 0x38, 0x64, 0x38, 0x31, 0x55, + 0x56, 0x77, 0x4b, 0x71, 0x72, 0x41, 0x6a, 0x6e, 0x38, 0x75, 0x4b, 0x4c, + 0x76, 0x36, 0x51, 0x4d, 0x39, 0x66, 0x4e, 0x64, 0x6c, 0x64, 0x6f, 0x4e, + 0x7a, 0x51, 0x2b, 0x72, 0x6e, 0x4f, 0x48, 0x67, 0x46, 0x6c, 0x6e, 0x72, + 0x79, 0x53, 0x55, 0x5a, 0x52, 0x7a, 0x39, 0x51, 0x49, 0x54, 0x33, 0x76, + 0x50, 0x66, 0x74, 0x51, 0x6b, 0x45, 0x7a, 0x32, 0x55, 0x45, 0x41, 0x53, + 0x70, 0x31, 0x4d, 0x69, 0x35, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, - 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, - 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, - 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, - 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, - 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, - 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2d, - 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x2d, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x2e, - 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, - 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x70, 0x6b, 0x32, - 0x68, 0x69, 0x57, 0x72, 0x43, 0x58, 0x4d, 0x41, 0x79, 0x32, 0x66, 0x52, - 0x50, 0x77, 0x45, 0x79, 0x68, 0x76, 0x6b, 0x61, 0x2b, 0x6d, 0x71, 0x77, - 0x7a, 0x65, 0x50, 0x36, 0x30, 0x4a, 0x72, 0x31, 0x74, 0x52, 0x59, 0x69, - 0x35, 0x78, 0x72, 0x75, 0x2b, 0x33, 0x6b, 0x6f, 0x39, 0x34, 0x48, 0x49, - 0x39, 0x6f, 0x36, 0x6c, 0x4b, 0x30, 0x43, 0x54, 0x33, 0x33, 0x2f, 0x77, - 0x34, 0x52, 0x44, 0x6c, 0x78, 0x57, 0x63, 0x68, 0x6d, 0x64, 0x68, 0x44, - 0x43, 0x72, 0x76, 0x64, 0x72, 0x2b, 0x70, 0x48, 0x43, 0x69, 0x67, 0x3d, - 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x2e, 0x32, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, - 0x66, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x30, 0x2e, 0x30, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, + 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x36, 0x2e, + 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x36, 0x2e, 0x31, + 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, + 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x36, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, + 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, + 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, + 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, + 0x33, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, + 0x61, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x34, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, @@ -846,123 +495,39 @@ unsigned char OUTPUT_JS[] = { 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, - 0x63, 0x68, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, - 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, - 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2f, 0x2d, 0x2f, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2d, 0x33, 0x2e, 0x31, - 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, - 0x31, 0x65, 0x41, 0x74, 0x46, 0x57, 0x64, 0x49, 0x75, 0x62, 0x69, 0x36, - 0x54, 0x34, 0x58, 0x50, 0x79, 0x36, 0x65, 0x69, 0x39, 0x69, 0x55, 0x46, - 0x6f, 0x4b, 0x70, 0x55, 0x6b, 0x49, 0x46, 0x39, 0x37, 0x31, 0x51, 0x4c, - 0x4e, 0x38, 0x6c, 0x49, 0x76, 0x76, 0x76, 0x77, 0x75, 0x65, 0x49, 0x36, - 0x35, 0x2b, 0x4e, 0x77, 0x35, 0x68, 0x61, 0x4d, 0x4e, 0x4b, 0x55, 0x77, - 0x66, 0x4a, 0x78, 0x61, 0x62, 0x71, 0x6c, 0x49, 0x49, 0x44, 0x4f, 0x44, - 0x4a, 0x4b, 0x47, 0x72, 0x51, 0x36, 0x36, 0x67, 0x78, 0x43, 0x30, 0x50, - 0x62, 0x51, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, - 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x22, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, - 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x66, 0x61, - 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, - 0x2e, 0x31, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, - 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x2f, 0x2d, 0x2f, 0x66, 0x61, - 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, - 0x2d, 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, - 0x35, 0x31, 0x32, 0x2d, 0x6c, 0x68, 0x64, 0x2f, 0x77, 0x46, 0x2b, 0x4c, - 0x6b, 0x39, 0x38, 0x48, 0x5a, 0x6f, 0x54, 0x43, 0x74, 0x6c, 0x56, 0x72, - 0x61, 0x48, 0x74, 0x66, 0x68, 0x35, 0x58, 0x59, 0x69, 0x6a, 0x49, 0x6a, - 0x61, 0x6c, 0x58, 0x63, 0x6b, 0x37, 0x73, 0x61, 0x55, 0x74, 0x75, 0x61, - 0x6e, 0x53, 0x44, 0x79, 0x4c, 0x4d, 0x78, 0x6e, 0x48, 0x68, 0x53, 0x58, - 0x45, 0x44, 0x4a, 0x71, 0x48, 0x78, 0x44, 0x37, 0x6d, 0x73, 0x52, 0x38, - 0x44, 0x30, 0x75, 0x43, 0x6d, 0x71, 0x6c, 0x6b, 0x77, 0x6a, 0x43, 0x56, - 0x38, 0x78, 0x76, 0x77, 0x48, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2f, 0x2d, 0x2f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x31, 0x35, 0x2e, 0x35, 0x2e, 0x33, - 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x73, 0x4d, - 0x2b, 0x6a, 0x58, 0x61, 0x4f, 0x35, 0x4b, 0x69, 0x6e, 0x54, 0x75, 0x69, - 0x36, 0x6c, 0x62, 0x4b, 0x2f, 0x37, 0x62, 0x37, 0x48, 0x2f, 0x4b, 0x6e, - 0x6a, 0x39, 0x42, 0x70, 0x6a, 0x47, 0x78, 0x5a, 0x2b, 0x4b, 0x69, 0x33, - 0x35, 0x76, 0x37, 0x59, 0x62, 0x55, 0x4a, 0x78, 0x78, 0x64, 0x42, 0x43, - 0x55, 0x71, 0x4e, 0x4d, 0x30, 0x68, 0x33, 0x43, 0x52, 0x56, 0x55, 0x31, - 0x5a, 0x46, 0x39, 0x74, 0x35, 0x6c, 0x4e, 0x69, 0x42, 0x7a, 0x76, 0x42, - 0x43, 0x53, 0x59, 0x50, 0x76, 0x49, 0x77, 0x78, 0x50, 0x4f, 0x51, 0x41, - 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x70, 0x65, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x67, 0x69, - 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x3e, 0x3d, 0x20, 0x31, 0x30, 0x2e, 0x78, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x2f, - 0x2d, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, - 0x67, 0x2d, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x2e, 0x74, 0x67, 0x7a, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, - 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x35, 0x78, 0x4e, 0x68, 0x50, 0x34, - 0x30, 0x36, 0x33, 0x64, 0x31, 0x36, 0x50, 0x7a, 0x33, 0x48, 0x42, 0x74, - 0x4b, 0x70, 0x72, 0x75, 0x74, 0x73, 0x50, 0x72, 0x6d, 0x48, 0x5a, 0x69, - 0x35, 0x49, 0x64, 0x55, 0x47, 0x4f, 0x57, 0x52, 0x78, 0x41, 0x32, 0x42, - 0x36, 0x56, 0x46, 0x37, 0x42, 0x49, 0x52, 0x47, 0x4f, 0x48, 0x5a, 0x35, - 0x57, 0x51, 0x76, 0x44, 0x6d, 0x4a, 0x58, 0x5a, 0x75, 0x50, 0x63, 0x42, - 0x67, 0x37, 0x72, 0x59, 0x77, 0x61, 0x46, 0x78, 0x76, 0x51, 0x59, 0x6a, - 0x71, 0x6b, 0x53, 0x64, 0x52, 0x33, 0x54, 0x51, 0x3d, 0x3d, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, - 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x31, 0x2e, + 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, + 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, + 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x2d, 0x2f, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, + 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x2d, 0x31, 0x58, 0x6f, 0x44, 0x79, 0x38, 0x6b, 0x4a, 0x6e, + 0x79, 0x57, 0x59, 0x2f, 0x69, 0x2f, 0x2b, 0x67, 0x4c, 0x54, 0x45, 0x62, + 0x59, 0x4c, 0x6e, 0x6f, 0x69, 0x56, 0x74, 0x53, 0x38, 0x79, 0x37, 0x69, + 0x6b, 0x42, 0x72, 0x2f, 0x49, 0x66, 0x6d, 0x4d, 0x4c, 0x34, 0x51, 0x62, + 0x2b, 0x43, 0x4d, 0x37, 0x64, 0x45, 0x45, 0x62, 0x49, 0x55, 0x4f, 0x6a, + 0x6e, 0x59, 0x37, 0x31, 0x36, 0x57, 0x71, 0x6d, 0x5a, 0x2f, 0x55, 0x70, + 0x58, 0x49, 0x78, 0x54, 0x66, 0x4a, 0x73, 0x59, 0x37, 0x72, 0x4d, 0x63, + 0x71, 0x69, 0x43, 0x58, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, + 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x3e, 0x3d, 0x31, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, - 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x39, 0x2e, 0x30, 0x20, 0x7c, 0x7c, - 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, + 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, @@ -970,184 +535,1370 @@ unsigned char OUTPUT_JS[] = { 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, - 0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x7b, + 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, + 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x2d, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, + 0x61, 0x35, 0x31, 0x32, 0x2d, 0x4c, 0x38, 0x70, 0x54, 0x6f, 0x54, 0x57, + 0x2f, 0x2b, 0x58, 0x72, 0x75, 0x32, 0x46, 0x46, 0x41, 0x68, 0x6b, 0x5a, + 0x31, 0x4f, 0x41, 0x39, 0x71, 0x34, 0x56, 0x34, 0x6e, 0x75, 0x76, 0x66, + 0x6f, 0x50, 0x65, 0x63, 0x42, 0x4d, 0x33, 0x34, 0x44, 0x65, 0x63, 0x41, + 0x75, 0x67, 0x55, 0x5a, 0x45, 0x42, 0x68, 0x49, 0x32, 0x48, 0x6d, 0x70, + 0x67, 0x6e, 0x7a, 0x71, 0x32, 0x68, 0x54, 0x4b, 0x5a, 0x36, 0x30, 0x4c, + 0x41, 0x4d, 0x72, 0x6c, 0x71, 0x69, 0x41, 0x53, 0x6d, 0x30, 0x61, 0x71, + 0x41, 0x59, 0x36, 0x46, 0x38, 0x2f, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, + 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, + 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, + 0x31, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, + 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, + 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, + 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x30, + 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x20, + 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, + 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, + 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x33, 0x2e, 0x31, + 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, + 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x32, 0x2e, 0x36, 0x2e, + 0x31, 0x30, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, + 0x6a, 0x69, 0x50, 0x6c, 0x4d, 0x54, 0x4e, 0x36, 0x2f, 0x35, 0x43, 0x6a, + 0x5a, 0x70, 0x4a, 0x4f, 0x6b, 0x47, 0x65, 0x55, 0x56, 0x30, 0x6d, 0x62, + 0x34, 0x7a, 0x78, 0x78, 0x33, 0x33, 0x75, 0x58, 0x57, 0x64, 0x6a, 0x2f, + 0x78, 0x51, 0x43, 0x66, 0x41, 0x4d, 0x6b, 0x75, 0x4e, 0x41, 0x43, 0x33, + 0x48, 0x4e, 0x37, 0x43, 0x76, 0x59, 0x44, 0x79, 0x4d, 0x48, 0x48, 0x45, + 0x7a, 0x6d, 0x63, 0x51, 0x35, 0x47, 0x56, 0x31, 0x32, 0x4c, 0x73, 0x7a, + 0x57, 0x6f, 0x51, 0x2f, 0x56, 0x6c, 0x78, 0x45, 0x54, 0x32, 0x34, 0x43, + 0x74, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, + 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, + 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x32, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, + 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, + 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, + 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, + 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, + 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, + 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, + 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, + 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, + 0x6c, 0x69, 0x6e, 0x6b, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x31, 0x2e, 0x32, 0x2e, 0x31, + 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x70, + 0x36, 0x37, 0x43, 0x4d, 0x45, 0x46, 0x50, 0x37, 0x6b, 0x4f, 0x47, 0x31, + 0x4a, 0x5a, 0x30, 0x5a, 0x6b, 0x59, 0x5a, 0x77, 0x52, 0x44, 0x61, 0x33, + 0x36, 0x39, 0x77, 0x35, 0x50, 0x49, 0x6a, 0x74, 0x4d, 0x6a, 0x76, 0x72, + 0x51, 0x64, 0x2f, 0x48, 0x6e, 0x49, 0x56, 0x38, 0x46, 0x52, 0x73, 0x48, + 0x52, 0x71, 0x4c, 0x71, 0x4b, 0x2b, 0x6f, 0x41, 0x5a, 0x51, 0x6e, 0x46, + 0x61, 0x31, 0x44, 0x44, 0x64, 0x5a, 0x74, 0x4f, 0x74, 0x48, 0x54, 0x69, + 0x2b, 0x61, 0x4d, 0x49, 0x57, 0x36, 0x45, 0x61, 0x74, 0x43, 0x32, 0x6a, + 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x31, 0x2e, 0x33, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, + 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, + 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x32, 0x31, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, + 0x31, 0x31, 0x2e, 0x33, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, + 0x32, 0x2e, 0x33, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, + 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, + 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x33, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, + 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, + 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x6a, 0x41, 0x5a, 0x4f, 0x4f, 0x61, 0x68, 0x4a, + 0x55, 0x36, 0x62, 0x77, 0x53, 0x71, 0x62, 0x32, 0x5a, 0x79, 0x73, 0x6b, + 0x45, 0x4b, 0x31, 0x58, 0x64, 0x67, 0x55, 0x59, 0x39, 0x6e, 0x6b, 0x6d, + 0x65, 0x63, 0x6c, 0x43, 0x72, 0x57, 0x37, 0x47, 0x64, 0x64, 0x68, 0x31, + 0x75, 0x61, 0x73, 0x48, 0x56, 0x71, 0x6d, 0x6f, 0x59, 0x63, 0x34, 0x43, + 0x4b, 0x64, 0x62, 0x30, 0x2f, 0x48, 0x30, 0x59, 0x31, 0x4a, 0x39, 0x6c, + 0x76, 0x61, 0x58, 0x4b, 0x6c, 0x65, 0x32, 0x57, 0x73, 0x77, 0x2f, 0x5a, + 0x78, 0x31, 0x41, 0x79, 0x55, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, + 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x35, + 0x2e, 0x31, 0x37, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, + 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x2d, 0x2f, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, + 0x74, 0x74, 0x70, 0x2d, 0x31, 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x2e, 0x74, + 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, + 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x75, 0x57, 0x63, 0x71, + 0x41, 0x6f, 0x74, 0x62, 0x77, 0x44, 0x45, 0x55, 0x2f, 0x39, 0x2b, 0x44, + 0x6d, 0x39, 0x65, 0x31, 0x2f, 0x63, 0x6c, 0x4f, 0x37, 0x68, 0x54, 0x42, + 0x32, 0x6b, 0x51, 0x2f, 0x39, 0x34, 0x4a, 0x59, 0x63, 0x47, 0x6f, 0x75, + 0x42, 0x56, 0x4c, 0x6a, 0x6f, 0x4b, 0x6d, 0x54, 0x65, 0x4a, 0x54, 0x55, + 0x50, 0x51, 0x4b, 0x63, 0x4a, 0x47, 0x70, 0x50, 0x77, 0x55, 0x6a, 0x5a, + 0x63, 0x53, 0x71, 0x67, 0x59, 0x69, 0x63, 0x62, 0x46, 0x71, 0x51, 0x53, + 0x6f, 0x4a, 0x49, 0x57, 0x30, 0x79, 0x72, 0x46, 0x76, 0x67, 0x3d, 0x3d, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, + 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, + 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, + 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, + 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, + 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, + 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, + 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, + 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, + 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, + 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, + 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2d, 0x30, 0x2e, 0x32, 0x2e, 0x31, + 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x32, + 0x74, 0x49, 0x68, 0x4f, 0x49, 0x72, 0x6e, 0x61, 0x46, 0x34, 0x55, 0x62, + 0x51, 0x48, 0x66, 0x37, 0x6b, 0x6a, 0x65, 0x51, 0x41, 0x2f, 0x45, 0x6d, + 0x53, 0x6f, 0x72, 0x42, 0x37, 0x2b, 0x48, 0x79, 0x4a, 0x49, 0x49, 0x72, + 0x55, 0x6a, 0x4a, 0x4f, 0x4b, 0x42, 0x67, 0x6e, 0x58, 0x77, 0x75, 0x65, + 0x78, 0x69, 0x38, 0x61, 0x4d, 0x65, 0x63, 0x52, 0x6c, 0x71, 0x54, 0x49, + 0x44, 0x57, 0x63, 0x79, 0x56, 0x58, 0x43, 0x65, 0x71, 0x4c, 0x68, 0x55, + 0x6e, 0x7a, 0x74, 0x4d, 0x61, 0x36, 0x62, 0x4f, 0x48, 0x2f, 0x6a, 0x54, + 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, + 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, + 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, + 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, + 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, + 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, + 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, + 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, + 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, + 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2d, + 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x2d, 0x70, 0x6b, 0x32, 0x68, 0x69, 0x57, 0x72, 0x43, 0x58, + 0x4d, 0x41, 0x79, 0x32, 0x66, 0x52, 0x50, 0x77, 0x45, 0x79, 0x68, 0x76, + 0x6b, 0x61, 0x2b, 0x6d, 0x71, 0x77, 0x7a, 0x65, 0x50, 0x36, 0x30, 0x4a, + 0x72, 0x31, 0x74, 0x52, 0x59, 0x69, 0x35, 0x78, 0x72, 0x75, 0x2b, 0x33, + 0x6b, 0x6f, 0x39, 0x34, 0x48, 0x49, 0x39, 0x6f, 0x36, 0x6c, 0x4b, 0x30, + 0x43, 0x54, 0x33, 0x33, 0x2f, 0x77, 0x34, 0x52, 0x44, 0x6c, 0x78, 0x57, + 0x63, 0x68, 0x6d, 0x64, 0x68, 0x44, 0x43, 0x72, 0x76, 0x64, 0x72, 0x2b, + 0x70, 0x48, 0x43, 0x69, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, + 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x5e, 0x30, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, + 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x5e, 0x32, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, + 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x31, + 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, + 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, + 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, + 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x63, 0x72, 0x6f, + 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x6c, - 0x69, 0x62, 0x2d, 0x32, 0x2e, 0x33, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, + 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2f, 0x2d, 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2d, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, - 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x37, 0x37, 0x45, 0x62, 0x79, 0x50, - 0x50, 0x70, 0x4d, 0x7a, 0x2b, 0x46, 0x52, 0x46, 0x52, 0x75, 0x41, 0x46, - 0x6c, 0x57, 0x4d, 0x74, 0x6d, 0x67, 0x55, 0x57, 0x47, 0x65, 0x39, 0x55, - 0x4f, 0x47, 0x32, 0x5a, 0x32, 0x35, 0x4e, 0x71, 0x43, 0x77, 0x69, 0x49, - 0x6a, 0x52, 0x68, 0x4f, 0x66, 0x35, 0x69, 0x4b, 0x47, 0x75, 0x7a, 0x53, - 0x65, 0x35, 0x50, 0x32, 0x77, 0x31, 0x6c, 0x61, 0x71, 0x2b, 0x46, 0x6b, - 0x52, 0x79, 0x34, 0x70, 0x2b, 0x50, 0x43, 0x75, 0x56, 0x6b, 0x4a, 0x53, - 0x47, 0x6b, 0x7a, 0x54, 0x45, 0x4b, 0x56, 0x77, 0x3d, 0x3d, 0x22, 0x0a, + 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x31, 0x65, 0x41, 0x74, 0x46, 0x57, + 0x64, 0x49, 0x75, 0x62, 0x69, 0x36, 0x54, 0x34, 0x58, 0x50, 0x79, 0x36, + 0x65, 0x69, 0x39, 0x69, 0x55, 0x46, 0x6f, 0x4b, 0x70, 0x55, 0x6b, 0x49, + 0x46, 0x39, 0x37, 0x31, 0x51, 0x4c, 0x4e, 0x38, 0x6c, 0x49, 0x76, 0x76, + 0x76, 0x77, 0x75, 0x65, 0x49, 0x36, 0x35, 0x2b, 0x4e, 0x77, 0x35, 0x68, + 0x61, 0x4d, 0x4e, 0x4b, 0x55, 0x77, 0x66, 0x4a, 0x78, 0x61, 0x62, 0x71, + 0x6c, 0x49, 0x49, 0x44, 0x4f, 0x44, 0x4a, 0x4b, 0x47, 0x72, 0x51, 0x36, + 0x36, 0x67, 0x78, 0x43, 0x30, 0x50, 0x62, 0x51, 0x3d, 0x3d, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, + 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, + 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, + 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x66, + 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, + 0x79, 0x2f, 0x2d, 0x2f, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, + 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x2d, 0x32, 0x2e, 0x31, 0x2e, 0x30, + 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, + 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6c, 0x68, + 0x64, 0x2f, 0x77, 0x46, 0x2b, 0x4c, 0x6b, 0x39, 0x38, 0x48, 0x5a, 0x6f, + 0x54, 0x43, 0x74, 0x6c, 0x56, 0x72, 0x61, 0x48, 0x74, 0x66, 0x68, 0x35, + 0x58, 0x59, 0x69, 0x6a, 0x49, 0x6a, 0x61, 0x6c, 0x58, 0x63, 0x6b, 0x37, + 0x73, 0x61, 0x55, 0x74, 0x75, 0x61, 0x6e, 0x53, 0x44, 0x79, 0x4c, 0x4d, + 0x78, 0x6e, 0x48, 0x68, 0x53, 0x58, 0x45, 0x44, 0x4a, 0x71, 0x48, 0x78, + 0x44, 0x37, 0x6d, 0x73, 0x52, 0x38, 0x44, 0x30, 0x75, 0x43, 0x6d, 0x71, + 0x6c, 0x6b, 0x77, 0x6a, 0x43, 0x56, 0x38, 0x78, 0x76, 0x77, 0x48, 0x77, + 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, + 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, + 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, + 0x6c, 0x2f, 0x2d, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, + 0x31, 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x73, 0x4d, 0x2b, 0x6a, 0x58, 0x61, 0x4f, 0x35, + 0x4b, 0x69, 0x6e, 0x54, 0x75, 0x69, 0x36, 0x6c, 0x62, 0x4b, 0x2f, 0x37, + 0x62, 0x37, 0x48, 0x2f, 0x4b, 0x6e, 0x6a, 0x39, 0x42, 0x70, 0x6a, 0x47, + 0x78, 0x5a, 0x2b, 0x4b, 0x69, 0x33, 0x35, 0x76, 0x37, 0x59, 0x62, 0x55, + 0x4a, 0x78, 0x78, 0x64, 0x42, 0x43, 0x55, 0x71, 0x4e, 0x4d, 0x30, 0x68, + 0x33, 0x43, 0x52, 0x56, 0x55, 0x31, 0x5a, 0x46, 0x39, 0x74, 0x35, 0x6c, + 0x4e, 0x69, 0x42, 0x7a, 0x76, 0x42, 0x43, 0x53, 0x59, 0x50, 0x76, 0x49, + 0x77, 0x78, 0x50, 0x4f, 0x51, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x22, 0x3a, + 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, 0x20, 0x31, 0x30, + 0x2e, 0x78, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, - 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, - 0x36, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, - 0x63, 0x68, 0x2f, 0x2d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, - 0x74, 0x63, 0x68, 0x2d, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x2e, 0x74, 0x67, - 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, - 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x56, 0x34, 0x61, 0x59, 0x67, - 0x38, 0x39, 0x6a, 0x45, 0x6f, 0x56, 0x52, 0x78, 0x52, 0x62, 0x32, 0x66, - 0x4a, 0x64, 0x41, 0x67, 0x38, 0x46, 0x48, 0x76, 0x49, 0x37, 0x63, 0x45, - 0x79, 0x59, 0x64, 0x56, 0x41, 0x68, 0x39, 0x34, 0x48, 0x48, 0x30, 0x55, - 0x49, 0x4b, 0x38, 0x6f, 0x4a, 0x78, 0x55, 0x66, 0x6b, 0x6a, 0x6c, 0x44, - 0x51, 0x4e, 0x39, 0x52, 0x62, 0x4d, 0x78, 0x2b, 0x62, 0x45, 0x6a, 0x50, - 0x37, 0x2b, 0x67, 0x67, 0x4d, 0x69, 0x46, 0x52, 0x70, 0x72, 0x53, 0x74, - 0x69, 0x30, 0x33, 0x32, 0x4f, 0x69, 0x70, 0x78, 0x77, 0x3d, 0x3d, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x67, - 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, - 0x20, 0x22, 0x34, 0x2e, 0x78, 0x20, 0x7c, 0x7c, 0x20, 0x3e, 0x3d, 0x36, - 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, - 0x31, 0x30, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, - 0x6d, 0x2f, 0x2d, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, - 0x2d, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, + 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, + 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, + 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, + 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x2f, 0x2d, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x2d, 0x32, 0x2e, 0x31, 0x32, + 0x2e, 0x35, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, + 0x35, 0x78, 0x4e, 0x68, 0x50, 0x34, 0x30, 0x36, 0x33, 0x64, 0x31, 0x36, + 0x50, 0x7a, 0x33, 0x48, 0x42, 0x74, 0x4b, 0x70, 0x72, 0x75, 0x74, 0x73, + 0x50, 0x72, 0x6d, 0x48, 0x5a, 0x69, 0x35, 0x49, 0x64, 0x55, 0x47, 0x4f, + 0x57, 0x52, 0x78, 0x41, 0x32, 0x42, 0x36, 0x56, 0x46, 0x37, 0x42, 0x49, + 0x52, 0x47, 0x4f, 0x48, 0x5a, 0x35, 0x57, 0x51, 0x76, 0x44, 0x6d, 0x4a, + 0x58, 0x5a, 0x75, 0x50, 0x63, 0x42, 0x67, 0x37, 0x72, 0x59, 0x77, 0x61, + 0x46, 0x78, 0x76, 0x51, 0x59, 0x6a, 0x71, 0x6b, 0x53, 0x64, 0x52, 0x33, + 0x54, 0x51, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, + 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, 0x31, 0x30, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x44, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, + 0x39, 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x30, + 0x2e, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x31, 0x2e, + 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x32, 0x2e, 0x30, + 0x20, 0x7c, 0x7c, 0x20, 0x5e, 0x30, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x20, + 0x7c, 0x7c, 0x20, 0x5e, 0x31, 0x34, 0x2e, 0x30, 0x2e, 0x30, 0x20, 0x7c, + 0x7c, 0x20, 0x5e, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x74, 0x73, 0x6c, + 0x69, 0x62, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, + 0x22, 0x32, 0x2e, 0x33, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, + 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, + 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, + 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2d, 0x32, 0x2e, 0x33, + 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, + 0x37, 0x37, 0x45, 0x62, 0x79, 0x50, 0x50, 0x70, 0x4d, 0x7a, 0x2b, 0x46, + 0x52, 0x46, 0x52, 0x75, 0x41, 0x46, 0x6c, 0x57, 0x4d, 0x74, 0x6d, 0x67, + 0x55, 0x57, 0x47, 0x65, 0x39, 0x55, 0x4f, 0x47, 0x32, 0x5a, 0x32, 0x35, + 0x4e, 0x71, 0x43, 0x77, 0x69, 0x49, 0x6a, 0x52, 0x68, 0x4f, 0x66, 0x35, + 0x69, 0x4b, 0x47, 0x75, 0x7a, 0x53, 0x65, 0x35, 0x50, 0x32, 0x77, 0x31, + 0x6c, 0x61, 0x71, 0x2b, 0x46, 0x6b, 0x52, 0x79, 0x34, 0x70, 0x2b, 0x50, + 0x43, 0x75, 0x56, 0x6b, 0x4a, 0x53, 0x47, 0x6b, 0x7a, 0x54, 0x45, 0x4b, + 0x56, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6e, 0x6f, + 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2f, 0x2d, 0x2f, 0x6e, + 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2d, 0x32, 0x2e, + 0x36, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, + 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, + 0x2d, 0x56, 0x34, 0x61, 0x59, 0x67, 0x38, 0x39, 0x6a, 0x45, 0x6f, 0x56, + 0x52, 0x78, 0x52, 0x62, 0x32, 0x66, 0x4a, 0x64, 0x41, 0x67, 0x38, 0x46, + 0x48, 0x76, 0x49, 0x37, 0x63, 0x45, 0x79, 0x59, 0x64, 0x56, 0x41, 0x68, + 0x39, 0x34, 0x48, 0x48, 0x30, 0x55, 0x49, 0x4b, 0x38, 0x6f, 0x4a, 0x78, + 0x55, 0x66, 0x6b, 0x6a, 0x6c, 0x44, 0x51, 0x4e, 0x39, 0x52, 0x62, 0x4d, + 0x78, 0x2b, 0x62, 0x45, 0x6a, 0x50, 0x37, 0x2b, 0x67, 0x67, 0x4d, 0x69, + 0x46, 0x52, 0x70, 0x72, 0x53, 0x74, 0x69, 0x30, 0x33, 0x32, 0x4f, 0x69, + 0x70, 0x78, 0x77, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x34, 0x2e, 0x78, 0x20, + 0x7c, 0x7c, 0x20, 0x3e, 0x3d, 0x36, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x2f, 0x2d, 0x2f, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x2d, 0x30, 0x2e, 0x31, 0x30, 0x2e, + 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x39, + 0x41, 0x35, 0x70, 0x71, 0x47, 0x6f, 0x51, 0x6b, 0x34, 0x39, 0x48, 0x36, + 0x56, 0x68, 0x6a, 0x62, 0x39, 0x6b, 0x50, 0x67, 0x41, 0x65, 0x65, 0x45, + 0x43, 0x66, 0x55, 0x44, 0x46, 0x36, 0x61, 0x49, 0x49, 0x43, 0x62, 0x4d, + 0x44, 0x4c, 0x32, 0x33, 0x6b, 0x44, 0x4c, 0x53, 0x74, 0x42, 0x6e, 0x31, + 0x4d, 0x57, 0x6b, 0x33, 0x59, 0x76, 0x63, 0x5a, 0x34, 0x78, 0x57, 0x46, + 0x39, 0x43, 0x73, 0x53, 0x66, 0x36, 0x58, 0x45, 0x67, 0x76, 0x52, 0x4c, + 0x6b, 0x58, 0x79, 0x34, 0x78, 0x6f, 0x66, 0x2f, 0x35, 0x36, 0x76, 0x56, + 0x77, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, + 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x2d, 0x65, 0x39, 0x30, 0x30, 0x6e, 0x4d, 0x38, 0x52, 0x52, + 0x74, 0x47, 0x68, 0x6c, 0x56, 0x33, 0x36, 0x4b, 0x47, 0x45, 0x55, 0x39, + 0x6b, 0x36, 0x35, 0x4b, 0x33, 0x6d, 0x50, 0x62, 0x31, 0x57, 0x56, 0x37, + 0x30, 0x4f, 0x64, 0x6a, 0x66, 0x78, 0x6c, 0x47, 0x32, 0x45, 0x41, 0x75, + 0x4d, 0x31, 0x6e, 0x6f, 0x69, 0x2f, 0x45, 0x2f, 0x42, 0x61, 0x57, 0x2f, + 0x75, 0x4d, 0x68, 0x4c, 0x37, 0x62, 0x50, 0x45, 0x73, 0x73, 0x4b, 0x38, + 0x51, 0x56, 0x35, 0x37, 0x76, 0x4e, 0x33, 0x65, 0x73, 0x69, 0x78, 0x6a, + 0x55, 0x76, 0x63, 0x58, 0x51, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, + 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, + 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2f, 0x2d, + 0x2f, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, - 0x61, 0x35, 0x31, 0x32, 0x2d, 0x39, 0x41, 0x35, 0x70, 0x71, 0x47, 0x6f, - 0x51, 0x6b, 0x34, 0x39, 0x48, 0x36, 0x56, 0x68, 0x6a, 0x62, 0x39, 0x6b, - 0x50, 0x67, 0x41, 0x65, 0x65, 0x45, 0x43, 0x66, 0x55, 0x44, 0x46, 0x36, - 0x61, 0x49, 0x49, 0x43, 0x62, 0x4d, 0x44, 0x4c, 0x32, 0x33, 0x6b, 0x44, - 0x4c, 0x53, 0x74, 0x42, 0x6e, 0x31, 0x4d, 0x57, 0x6b, 0x33, 0x59, 0x76, - 0x63, 0x5a, 0x34, 0x78, 0x57, 0x46, 0x39, 0x43, 0x73, 0x53, 0x66, 0x36, - 0x58, 0x45, 0x67, 0x76, 0x52, 0x4c, 0x6b, 0x58, 0x79, 0x34, 0x78, 0x6f, - 0x66, 0x2f, 0x35, 0x36, 0x76, 0x56, 0x77, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, + 0x61, 0x35, 0x31, 0x32, 0x2d, 0x75, 0x45, 0x74, 0x57, 0x6b, 0x46, 0x4d, + 0x2f, 0x73, 0x64, 0x5a, 0x76, 0x52, 0x4e, 0x4e, 0x44, 0x4c, 0x33, 0x45, + 0x68, 0x75, 0x34, 0x57, 0x56, 0x70, 0x77, 0x61, 0x75, 0x6c, 0x68, 0x77, + 0x51, 0x73, 0x7a, 0x56, 0x38, 0x6d, 0x72, 0x74, 0x63, 0x64, 0x65, 0x45, + 0x38, 0x6e, 0x4e, 0x30, 0x30, 0x42, 0x56, 0x39, 0x6d, 0x41, 0x6d, 0x51, + 0x38, 0x38, 0x52, 0x6b, 0x72, 0x42, 0x68, 0x46, 0x67, 0x6c, 0x39, 0x67, + 0x4d, 0x67, 0x76, 0x6a, 0x4a, 0x4c, 0x41, 0x51, 0x63, 0x5a, 0x62, 0x6e, + 0x50, 0x58, 0x49, 0x39, 0x6d, 0x6c, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, - 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, - 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, - 0x32, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, - 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x2e, - 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, - 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x65, 0x39, 0x30, - 0x30, 0x6e, 0x4d, 0x38, 0x52, 0x52, 0x74, 0x47, 0x68, 0x6c, 0x56, 0x33, - 0x36, 0x4b, 0x47, 0x45, 0x55, 0x39, 0x6b, 0x36, 0x35, 0x4b, 0x33, 0x6d, - 0x50, 0x62, 0x31, 0x57, 0x56, 0x37, 0x30, 0x4f, 0x64, 0x6a, 0x66, 0x78, - 0x6c, 0x47, 0x32, 0x45, 0x41, 0x75, 0x4d, 0x31, 0x6e, 0x6f, 0x69, 0x2f, - 0x45, 0x2f, 0x42, 0x61, 0x57, 0x2f, 0x75, 0x4d, 0x68, 0x4c, 0x37, 0x62, - 0x50, 0x45, 0x73, 0x73, 0x4b, 0x38, 0x51, 0x56, 0x35, 0x37, 0x76, 0x4e, - 0x33, 0x65, 0x73, 0x69, 0x78, 0x6a, 0x55, 0x76, 0x63, 0x58, 0x51, 0x3d, - 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x30, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, + 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x74, - 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, - 0x34, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x6e, 0x74, 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x2d, 0x69, 0x6e, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, - 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, - 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x75, - 0x45, 0x74, 0x57, 0x6b, 0x46, 0x4d, 0x2f, 0x73, 0x64, 0x5a, 0x76, 0x52, - 0x4e, 0x4e, 0x44, 0x4c, 0x33, 0x45, 0x68, 0x75, 0x34, 0x57, 0x56, 0x70, - 0x77, 0x61, 0x75, 0x6c, 0x68, 0x77, 0x51, 0x73, 0x7a, 0x56, 0x38, 0x6d, - 0x72, 0x74, 0x63, 0x64, 0x65, 0x45, 0x38, 0x6e, 0x4e, 0x30, 0x30, 0x42, - 0x56, 0x39, 0x6d, 0x41, 0x6d, 0x51, 0x38, 0x38, 0x52, 0x6b, 0x72, 0x42, - 0x68, 0x46, 0x67, 0x6c, 0x39, 0x67, 0x4d, 0x67, 0x76, 0x6a, 0x4a, 0x4c, - 0x41, 0x51, 0x63, 0x5a, 0x62, 0x6e, 0x50, 0x58, 0x49, 0x39, 0x6d, 0x6c, - 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, - 0x34, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2f, 0x2d, 0x2f, - 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2d, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x31, - 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x58, 0x6e, - 0x69, 0x33, 0x35, 0x4e, 0x4b, 0x7a, 0x6a, 0x67, 0x4d, 0x72, 0x77, 0x65, - 0x76, 0x79, 0x73, 0x48, 0x54, 0x43, 0x41, 0x72, 0x74, 0x4c, 0x44, 0x70, - 0x50, 0x76, 0x79, 0x65, 0x38, 0x7a, 0x56, 0x2f, 0x30, 0x45, 0x34, 0x45, - 0x79, 0x59, 0x6e, 0x34, 0x33, 0x50, 0x37, 0x2f, 0x37, 0x71, 0x76, 0x51, - 0x77, 0x50, 0x68, 0x39, 0x42, 0x47, 0x6b, 0x48, 0x65, 0x77, 0x62, 0x4d, - 0x75, 0x6c, 0x56, 0x6e, 0x74, 0x62, 0x69, 0x67, 0x6d, 0x63, 0x54, 0x37, - 0x72, 0x64, 0x58, 0x33, 0x42, 0x4e, 0x6f, 0x39, 0x77, 0x52, 0x4a, 0x67, - 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x31, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, + 0x6c, 0x69, 0x62, 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2d, + 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x58, 0x6e, 0x69, 0x33, 0x35, 0x4e, 0x4b, 0x7a, + 0x6a, 0x67, 0x4d, 0x72, 0x77, 0x65, 0x76, 0x79, 0x73, 0x48, 0x54, 0x43, + 0x41, 0x72, 0x74, 0x4c, 0x44, 0x70, 0x50, 0x76, 0x79, 0x65, 0x38, 0x7a, + 0x56, 0x2f, 0x30, 0x45, 0x34, 0x45, 0x79, 0x59, 0x6e, 0x34, 0x33, 0x50, + 0x37, 0x2f, 0x37, 0x71, 0x76, 0x51, 0x77, 0x50, 0x68, 0x39, 0x42, 0x47, + 0x6b, 0x48, 0x65, 0x77, 0x62, 0x4d, 0x75, 0x6c, 0x56, 0x6e, 0x74, 0x62, + 0x69, 0x67, 0x6d, 0x63, 0x54, 0x37, 0x72, 0x64, 0x58, 0x33, 0x42, 0x4e, + 0x6f, 0x39, 0x77, 0x52, 0x4a, 0x67, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7a, + 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, + 0x30, 0x2e, 0x38, 0x2e, 0x31, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, + 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, + 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, + 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, + 0x6c, 0x65, 0x2d, 0x30, 0x2e, 0x38, 0x2e, 0x31, 0x35, 0x2e, 0x74, 0x67, + 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x50, 0x51, 0x32, 0x50, 0x43, + 0x37, 0x52, 0x39, 0x72, 0x73, 0x6c, 0x78, 0x38, 0x34, 0x6e, 0x64, 0x4e, + 0x42, 0x5a, 0x42, 0x2f, 0x44, 0x6b, 0x76, 0x38, 0x56, 0x38, 0x66, 0x5a, + 0x45, 0x70, 0x6b, 0x38, 0x33, 0x52, 0x4c, 0x67, 0x58, 0x74, 0x59, 0x64, + 0x30, 0x66, 0x77, 0x55, 0x67, 0x45, 0x6a, 0x73, 0x65, 0x4d, 0x6e, 0x31, + 0x44, 0x67, 0x61, 0x6a, 0x68, 0x32, 0x78, 0x36, 0x53, 0x38, 0x51, 0x62, + 0x5a, 0x41, 0x46, 0x61, 0x39, 0x70, 0x32, 0x71, 0x56, 0x43, 0x45, 0x75, + 0x59, 0x5a, 0x4e, 0x67, 0x76, 0x65, 0x30, 0x64, 0x51, 0x3d, 0x3d, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x31, 0x35, + 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x32, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x30, 0x2e, 0x38, - 0x2e, 0x31, 0x35, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x2f, 0x2d, 0x2f, 0x7a, 0x65, 0x6e, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, + 0x74, 0x73, 0x2d, 0x30, 0x2e, 0x38, 0x2e, 0x32, 0x31, 0x2e, 0x74, 0x67, + 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x59, 0x6a, 0x33, 0x79, 0x58, + 0x77, 0x65, 0x52, 0x63, 0x38, 0x4c, 0x64, 0x52, 0x4d, 0x72, 0x43, 0x43, + 0x38, 0x6e, 0x49, 0x63, 0x34, 0x6b, 0x6b, 0x6a, 0x57, 0x65, 0x63, 0x50, + 0x41, 0x55, 0x56, 0x68, 0x30, 0x54, 0x49, 0x30, 0x4f, 0x55, 0x72, 0x57, + 0x58, 0x78, 0x36, 0x61, 0x58, 0x37, 0x39, 0x30, 0x76, 0x4c, 0x63, 0x44, + 0x6c, 0x57, 0x63, 0x61, 0x36, 0x49, 0x34, 0x76, 0x73, 0x79, 0x43, 0x47, + 0x48, 0x33, 0x4c, 0x70, 0x57, 0x78, 0x71, 0x30, 0x64, 0x4a, 0x52, 0x63, + 0x4d, 0x4f, 0x46, 0x6f, 0x56, 0x71, 0x6d, 0x65, 0x67, 0x3d, 0x3d, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, + 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, + 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, + 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, + 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x36, + 0x2e, 0x39, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, + 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x2d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, + 0x31, 0x36, 0x2e, 0x39, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x51, 0x70, 0x4c, 0x63, 0x58, 0x39, 0x5a, 0x53, + 0x73, 0x71, 0x33, 0x59, 0x59, 0x55, 0x55, 0x6e, 0x44, 0x33, 0x6e, 0x46, + 0x44, 0x59, 0x38, 0x48, 0x37, 0x77, 0x63, 0x74, 0x41, 0x68, 0x51, 0x6a, + 0x2f, 0x54, 0x46, 0x4b, 0x4c, 0x38, 0x59, 0x61, 0x38, 0x76, 0x35, 0x66, + 0x4d, 0x6d, 0x33, 0x43, 0x46, 0x58, 0x78, 0x6f, 0x38, 0x7a, 0x53, 0x74, + 0x73, 0x4c, 0x41, 0x6c, 0x37, 0x38, 0x30, 0x6c, 0x74, 0x6f, 0x59, 0x6f, + 0x6f, 0x31, 0x57, 0x76, 0x4b, 0x55, 0x56, 0x47, 0x42, 0x51, 0x4b, 0x2b, + 0x31, 0x69, 0x66, 0x72, 0x37, 0x67, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x33, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, + 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, + 0x6c, 0x65, 0x2d, 0x30, 0x2e, 0x38, 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, + 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x66, 0x62, 0x46, 0x36, 0x6f, 0x54, + 0x64, 0x34, 0x73, 0x47, 0x47, 0x79, 0x30, 0x78, 0x6a, 0x48, 0x50, 0x4b, + 0x41, 0x74, 0x2b, 0x65, 0x53, 0x32, 0x43, 0x72, 0x78, 0x4a, 0x33, 0x2b, + 0x36, 0x67, 0x51, 0x33, 0x46, 0x47, 0x63, 0x42, 0x6f, 0x49, 0x4a, 0x52, + 0x32, 0x54, 0x4c, 0x41, 0x79, 0x43, 0x6b, 0x43, 0x79, 0x49, 0x38, 0x4a, + 0x71, 0x5a, 0x4e, 0x79, 0x2b, 0x46, 0x65, 0x4f, 0x4e, 0x30, 0x41, 0x68, + 0x56, 0x67, 0x4e, 0x4a, 0x6f, 0x55, 0x75, 0x6d, 0x56, 0x6f, 0x5a, 0x51, + 0x6a, 0x42, 0x46, 0x55, 0x71, 0x48, 0x6b, 0x77, 0x3d, 0x3d, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, + 0x2e, 0x34, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x2d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x2e, 0x74, 0x67, + 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x4c, 0x72, 0x4b, 0x56, 0x4c, + 0x6f, 0x76, 0x65, 0x2f, 0x7a, 0x77, 0x36, 0x68, 0x32, 0x4d, 0x64, 0x2f, + 0x4b, 0x5a, 0x79, 0x57, 0x78, 0x49, 0x6b, 0x46, 0x4d, 0x36, 0x41, 0x6f, + 0x79, 0x4b, 0x70, 0x37, 0x31, 0x4f, 0x71, 0x70, 0x48, 0x39, 0x48, 0x69, + 0x69, 0x70, 0x31, 0x63, 0x73, 0x6a, 0x50, 0x56, 0x6f, 0x44, 0x33, 0x74, + 0x50, 0x78, 0x6c, 0x62, 0x51, 0x55, 0x4e, 0x78, 0x45, 0x6e, 0x48, 0x45, + 0x4e, 0x6b, 0x73, 0x33, 0x55, 0x47, 0x67, 0x4e, 0x70, 0x53, 0x42, 0x43, + 0x41, 0x66, 0x71, 0x39, 0x4b, 0x57, 0x75, 0x61, 0x67, 0x3d, 0x3d, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, + 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, + 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, + 0x20, 0x22, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x31, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, + 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x77, 0x72, + 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x2d, + 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2d, 0x30, 0x2e, + 0x31, 0x2e, 0x31, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, + 0x32, 0x2d, 0x6d, 0x77, 0x45, 0x56, 0x42, 0x44, 0x55, 0x56, 0x4f, 0x44, + 0x6c, 0x73, 0x51, 0x51, 0x35, 0x64, 0x66, 0x75, 0x4c, 0x55, 0x53, 0x35, + 0x2f, 0x54, 0x66, 0x37, 0x6a, 0x71, 0x55, 0x4b, 0x79, 0x68, 0x4b, 0x59, + 0x48, 0x6d, 0x56, 0x69, 0x34, 0x66, 0x50, 0x42, 0x36, 0x62, 0x44, 0x4d, + 0x4f, 0x66, 0x57, 0x76, 0x55, 0x50, 0x4a, 0x6d, 0x4b, 0x67, 0x53, 0x31, + 0x5a, 0x37, 0x5a, 0x61, 0x2f, 0x73, 0x4f, 0x49, 0x33, 0x76, 0x7a, 0x57, + 0x74, 0x34, 0x2b, 0x4f, 0x37, 0x79, 0x43, 0x69, 0x4c, 0x2f, 0x37, 0x30, + 0x4d, 0x6f, 0x67, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, + 0x6f, 0x73, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, + 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, + 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x2f, 0x2d, 0x2f, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x2d, + 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x2d, 0x30, 0x35, 0x79, 0x35, 0x42, 0x4b, 0x63, 0x44, 0x61, + 0x61, 0x38, 0x77, 0x34, 0x37, 0x66, 0x38, 0x64, 0x38, 0x31, 0x55, 0x56, + 0x77, 0x4b, 0x71, 0x72, 0x41, 0x6a, 0x6e, 0x38, 0x75, 0x4b, 0x4c, 0x76, + 0x36, 0x51, 0x4d, 0x39, 0x66, 0x4e, 0x64, 0x6c, 0x64, 0x6f, 0x4e, 0x7a, + 0x51, 0x2b, 0x72, 0x6e, 0x4f, 0x48, 0x67, 0x46, 0x6c, 0x6e, 0x72, 0x79, + 0x53, 0x55, 0x5a, 0x52, 0x7a, 0x39, 0x51, 0x49, 0x54, 0x33, 0x76, 0x50, + 0x66, 0x74, 0x51, 0x6b, 0x45, 0x7a, 0x32, 0x55, 0x45, 0x41, 0x53, 0x70, + 0x31, 0x4d, 0x69, 0x35, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, + 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x30, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x31, 0x2e, 0x30, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, + 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, + 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x31, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x32, 0x2e, 0x34, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x2d, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x2e, 0x74, 0x67, + 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x31, 0x58, 0x6f, 0x44, 0x79, + 0x38, 0x6b, 0x4a, 0x6e, 0x79, 0x57, 0x59, 0x2f, 0x69, 0x2f, 0x2b, 0x67, + 0x4c, 0x54, 0x45, 0x62, 0x59, 0x4c, 0x6e, 0x6f, 0x69, 0x56, 0x74, 0x53, + 0x38, 0x79, 0x37, 0x69, 0x6b, 0x42, 0x72, 0x2f, 0x49, 0x66, 0x6d, 0x4d, + 0x4c, 0x34, 0x51, 0x62, 0x2b, 0x43, 0x4d, 0x37, 0x64, 0x45, 0x45, 0x62, + 0x49, 0x55, 0x4f, 0x6a, 0x6e, 0x59, 0x37, 0x31, 0x36, 0x57, 0x71, 0x6d, + 0x5a, 0x2f, 0x55, 0x70, 0x58, 0x49, 0x78, 0x54, 0x66, 0x4a, 0x73, 0x59, + 0x37, 0x72, 0x4d, 0x63, 0x71, 0x69, 0x43, 0x58, 0x41, 0x3d, 0x3d, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, + 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, + 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x36, 0x2e, 0x36, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2f, 0x2d, + 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2d, 0x31, + 0x2e, 0x36, 0x2e, 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, + 0x32, 0x2d, 0x4c, 0x38, 0x70, 0x54, 0x6f, 0x54, 0x57, 0x2f, 0x2b, 0x58, + 0x72, 0x75, 0x32, 0x46, 0x46, 0x41, 0x68, 0x6b, 0x5a, 0x31, 0x4f, 0x41, + 0x39, 0x71, 0x34, 0x56, 0x34, 0x6e, 0x75, 0x76, 0x66, 0x6f, 0x50, 0x65, + 0x63, 0x42, 0x4d, 0x33, 0x34, 0x44, 0x65, 0x63, 0x41, 0x75, 0x67, 0x55, + 0x5a, 0x45, 0x42, 0x68, 0x49, 0x32, 0x48, 0x6d, 0x70, 0x67, 0x6e, 0x7a, + 0x71, 0x32, 0x68, 0x54, 0x4b, 0x5a, 0x36, 0x30, 0x4c, 0x41, 0x4d, 0x72, + 0x6c, 0x71, 0x69, 0x41, 0x53, 0x6d, 0x30, 0x61, 0x71, 0x41, 0x59, 0x36, + 0x46, 0x38, 0x2f, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x35, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, + 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, + 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, + 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, + 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x3a, + 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, + 0x2e, 0x31, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x32, 0x2e, + 0x36, 0x2e, 0x31, 0x30, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, + 0x32, 0x2d, 0x6a, 0x69, 0x50, 0x6c, 0x4d, 0x54, 0x4e, 0x36, 0x2f, 0x35, + 0x43, 0x6a, 0x5a, 0x70, 0x4a, 0x4f, 0x6b, 0x47, 0x65, 0x55, 0x56, 0x30, + 0x6d, 0x62, 0x34, 0x7a, 0x78, 0x78, 0x33, 0x33, 0x75, 0x58, 0x57, 0x64, + 0x6a, 0x2f, 0x78, 0x51, 0x43, 0x66, 0x41, 0x4d, 0x6b, 0x75, 0x4e, 0x41, + 0x43, 0x33, 0x48, 0x4e, 0x37, 0x43, 0x76, 0x59, 0x44, 0x79, 0x4d, 0x48, + 0x48, 0x45, 0x7a, 0x6d, 0x63, 0x51, 0x35, 0x47, 0x56, 0x31, 0x32, 0x4c, + 0x73, 0x7a, 0x57, 0x6f, 0x51, 0x2f, 0x56, 0x6c, 0x78, 0x45, 0x54, 0x32, + 0x34, 0x43, 0x74, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, + 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, + 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, + 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x31, + 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2f, + 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, + 0x6b, 0x2d, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x2e, 0x74, 0x67, 0x7a, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, + 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x70, 0x36, 0x37, 0x43, 0x4d, 0x45, + 0x46, 0x50, 0x37, 0x6b, 0x4f, 0x47, 0x31, 0x4a, 0x5a, 0x30, 0x5a, 0x6b, + 0x59, 0x5a, 0x77, 0x52, 0x44, 0x61, 0x33, 0x36, 0x39, 0x77, 0x35, 0x50, + 0x49, 0x6a, 0x74, 0x4d, 0x6a, 0x76, 0x72, 0x51, 0x64, 0x2f, 0x48, 0x6e, + 0x49, 0x56, 0x38, 0x46, 0x52, 0x73, 0x48, 0x52, 0x71, 0x4c, 0x71, 0x4b, + 0x2b, 0x6f, 0x41, 0x5a, 0x51, 0x6e, 0x46, 0x61, 0x31, 0x44, 0x44, 0x64, + 0x5a, 0x74, 0x4f, 0x74, 0x48, 0x54, 0x69, 0x2b, 0x61, 0x4d, 0x49, 0x57, + 0x36, 0x45, 0x61, 0x74, 0x43, 0x32, 0x6a, 0x67, 0x3d, 0x3d, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, + 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, + 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, + 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, + 0x74, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x32, + 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x33, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, + 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, + 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x6a, 0x41, 0x5a, 0x4f, 0x4f, 0x61, 0x68, 0x4a, + 0x55, 0x36, 0x62, 0x77, 0x53, 0x71, 0x62, 0x32, 0x5a, 0x79, 0x73, 0x6b, + 0x45, 0x4b, 0x31, 0x58, 0x64, 0x67, 0x55, 0x59, 0x39, 0x6e, 0x6b, 0x6d, + 0x65, 0x63, 0x6c, 0x43, 0x72, 0x57, 0x37, 0x47, 0x64, 0x64, 0x68, 0x31, + 0x75, 0x61, 0x73, 0x48, 0x56, 0x71, 0x6d, 0x6f, 0x59, 0x63, 0x34, 0x43, + 0x4b, 0x64, 0x62, 0x30, 0x2f, 0x48, 0x30, 0x59, 0x31, 0x4a, 0x39, 0x6c, + 0x76, 0x61, 0x58, 0x4b, 0x6c, 0x65, 0x32, 0x57, 0x73, 0x77, 0x2f, 0x5a, + 0x78, 0x31, 0x41, 0x79, 0x55, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, + 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, + 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, + 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, + 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, + 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, + 0x74, 0x74, 0x70, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, + 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x31, + 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x2d, 0x75, 0x57, 0x63, 0x71, 0x41, 0x6f, 0x74, 0x62, 0x77, + 0x44, 0x45, 0x55, 0x2f, 0x39, 0x2b, 0x44, 0x6d, 0x39, 0x65, 0x31, 0x2f, + 0x63, 0x6c, 0x4f, 0x37, 0x68, 0x54, 0x42, 0x32, 0x6b, 0x51, 0x2f, 0x39, + 0x34, 0x4a, 0x59, 0x63, 0x47, 0x6f, 0x75, 0x42, 0x56, 0x4c, 0x6a, 0x6f, + 0x4b, 0x6d, 0x54, 0x65, 0x4a, 0x54, 0x55, 0x50, 0x51, 0x4b, 0x63, 0x4a, + 0x47, 0x70, 0x50, 0x77, 0x55, 0x6a, 0x5a, 0x63, 0x53, 0x71, 0x67, 0x59, + 0x69, 0x63, 0x62, 0x46, 0x71, 0x51, 0x53, 0x6f, 0x4a, 0x49, 0x57, 0x30, + 0x79, 0x72, 0x46, 0x76, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, + 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, + 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, + 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, + 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, + 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, + 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, + 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, + 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, + 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2d, 0x30, 0x2e, 0x32, 0x2e, 0x31, + 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x32, + 0x74, 0x49, 0x68, 0x4f, 0x49, 0x72, 0x6e, 0x61, 0x46, 0x34, 0x55, 0x62, + 0x51, 0x48, 0x66, 0x37, 0x6b, 0x6a, 0x65, 0x51, 0x41, 0x2f, 0x45, 0x6d, + 0x53, 0x6f, 0x72, 0x42, 0x37, 0x2b, 0x48, 0x79, 0x4a, 0x49, 0x49, 0x72, + 0x55, 0x6a, 0x4a, 0x4f, 0x4b, 0x42, 0x67, 0x6e, 0x58, 0x77, 0x75, 0x65, + 0x78, 0x69, 0x38, 0x61, 0x4d, 0x65, 0x63, 0x52, 0x6c, 0x71, 0x54, 0x49, + 0x44, 0x57, 0x63, 0x79, 0x56, 0x58, 0x43, 0x65, 0x71, 0x4c, 0x68, 0x55, + 0x6e, 0x7a, 0x74, 0x4d, 0x61, 0x36, 0x62, 0x4f, 0x48, 0x2f, 0x6a, 0x54, + 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, + 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, + 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, + 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, + 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, + 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, + 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2d, 0x2f, + 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x2d, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x2e, 0x74, + 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, + 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x70, 0x6b, 0x32, 0x68, + 0x69, 0x57, 0x72, 0x43, 0x58, 0x4d, 0x41, 0x79, 0x32, 0x66, 0x52, 0x50, + 0x77, 0x45, 0x79, 0x68, 0x76, 0x6b, 0x61, 0x2b, 0x6d, 0x71, 0x77, 0x7a, + 0x65, 0x50, 0x36, 0x30, 0x4a, 0x72, 0x31, 0x74, 0x52, 0x59, 0x69, 0x35, + 0x78, 0x72, 0x75, 0x2b, 0x33, 0x6b, 0x6f, 0x39, 0x34, 0x48, 0x49, 0x39, + 0x6f, 0x36, 0x6c, 0x4b, 0x30, 0x43, 0x54, 0x33, 0x33, 0x2f, 0x77, 0x34, + 0x52, 0x44, 0x6c, 0x78, 0x57, 0x63, 0x68, 0x6d, 0x64, 0x68, 0x44, 0x43, + 0x72, 0x76, 0x64, 0x72, 0x2b, 0x70, 0x48, 0x43, 0x69, 0x67, 0x3d, 0x3d, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, + 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x66, 0x61, 0x73, 0x74, 0x2d, + 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x22, 0x3a, 0x20, + 0x22, 0x5e, 0x32, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, + 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, + 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x72, 0x6f, 0x73, 0x73, + 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, + 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2f, 0x2d, + 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2d, 0x33, 0x2e, 0x31, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, + 0x35, 0x31, 0x32, 0x2d, 0x31, 0x65, 0x41, 0x74, 0x46, 0x57, 0x64, 0x49, + 0x75, 0x62, 0x69, 0x36, 0x54, 0x34, 0x58, 0x50, 0x79, 0x36, 0x65, 0x69, + 0x39, 0x69, 0x55, 0x46, 0x6f, 0x4b, 0x70, 0x55, 0x6b, 0x49, 0x46, 0x39, + 0x37, 0x31, 0x51, 0x4c, 0x4e, 0x38, 0x6c, 0x49, 0x76, 0x76, 0x76, 0x77, + 0x75, 0x65, 0x49, 0x36, 0x35, 0x2b, 0x4e, 0x77, 0x35, 0x68, 0x61, 0x4d, + 0x4e, 0x4b, 0x55, 0x77, 0x66, 0x4a, 0x78, 0x61, 0x62, 0x71, 0x6c, 0x49, + 0x49, 0x44, 0x4f, 0x44, 0x4a, 0x4b, 0x47, 0x72, 0x51, 0x36, 0x36, 0x67, + 0x78, 0x43, 0x30, 0x50, 0x62, 0x51, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x66, 0x61, 0x73, + 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, + 0x31, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, + 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x2f, 0x2d, 0x2f, 0x66, 0x61, 0x73, + 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x2d, + 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, + 0x31, 0x32, 0x2d, 0x6c, 0x68, 0x64, 0x2f, 0x77, 0x46, 0x2b, 0x4c, 0x6b, + 0x39, 0x38, 0x48, 0x5a, 0x6f, 0x54, 0x43, 0x74, 0x6c, 0x56, 0x72, 0x61, + 0x48, 0x74, 0x66, 0x68, 0x35, 0x58, 0x59, 0x69, 0x6a, 0x49, 0x6a, 0x61, + 0x6c, 0x58, 0x63, 0x6b, 0x37, 0x73, 0x61, 0x55, 0x74, 0x75, 0x61, 0x6e, + 0x53, 0x44, 0x79, 0x4c, 0x4d, 0x78, 0x6e, 0x48, 0x68, 0x53, 0x58, 0x45, + 0x44, 0x4a, 0x71, 0x48, 0x78, 0x44, 0x37, 0x6d, 0x73, 0x52, 0x38, 0x44, + 0x30, 0x75, 0x43, 0x6d, 0x71, 0x6c, 0x6b, 0x77, 0x6a, 0x43, 0x56, 0x38, + 0x78, 0x76, 0x77, 0x48, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2f, 0x2d, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x71, 0x6c, 0x2d, 0x31, 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x2e, 0x74, + 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, + 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x73, 0x4d, 0x2b, 0x6a, + 0x58, 0x61, 0x4f, 0x35, 0x4b, 0x69, 0x6e, 0x54, 0x75, 0x69, 0x36, 0x6c, + 0x62, 0x4b, 0x2f, 0x37, 0x62, 0x37, 0x48, 0x2f, 0x4b, 0x6e, 0x6a, 0x39, + 0x42, 0x70, 0x6a, 0x47, 0x78, 0x5a, 0x2b, 0x4b, 0x69, 0x33, 0x35, 0x76, + 0x37, 0x59, 0x62, 0x55, 0x4a, 0x78, 0x78, 0x64, 0x42, 0x43, 0x55, 0x71, + 0x4e, 0x4d, 0x30, 0x68, 0x33, 0x43, 0x52, 0x56, 0x55, 0x31, 0x5a, 0x46, + 0x39, 0x74, 0x35, 0x6c, 0x4e, 0x69, 0x42, 0x7a, 0x76, 0x42, 0x43, 0x53, + 0x59, 0x50, 0x76, 0x49, 0x77, 0x78, 0x50, 0x4f, 0x51, 0x41, 0x3d, 0x3d, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, + 0x65, 0x72, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x31, 0x32, + 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, + 0x61, 0x67, 0x2f, 0x2d, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, + 0x2d, 0x74, 0x61, 0x67, 0x2d, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x2e, + 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, + 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x35, 0x78, 0x4e, + 0x68, 0x50, 0x34, 0x30, 0x36, 0x33, 0x64, 0x31, 0x36, 0x50, 0x7a, 0x33, + 0x48, 0x42, 0x74, 0x4b, 0x70, 0x72, 0x75, 0x74, 0x73, 0x50, 0x72, 0x6d, + 0x48, 0x5a, 0x69, 0x35, 0x49, 0x64, 0x55, 0x47, 0x4f, 0x57, 0x52, 0x78, + 0x41, 0x32, 0x42, 0x36, 0x56, 0x46, 0x37, 0x42, 0x49, 0x52, 0x47, 0x4f, + 0x48, 0x5a, 0x35, 0x57, 0x51, 0x76, 0x44, 0x6d, 0x4a, 0x58, 0x5a, 0x75, + 0x50, 0x63, 0x42, 0x67, 0x37, 0x72, 0x59, 0x77, 0x61, 0x46, 0x78, 0x76, + 0x51, 0x59, 0x6a, 0x71, 0x6b, 0x53, 0x64, 0x52, 0x33, 0x54, 0x51, 0x3d, + 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, + 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x31, 0x2e, 0x30, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, + 0x62, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x33, 0x2e, 0x31, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2f, 0x2d, 0x2f, 0x74, 0x73, + 0x6c, 0x69, 0x62, 0x2d, 0x32, 0x2e, 0x33, 0x2e, 0x31, 0x2e, 0x74, 0x67, + 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x37, + 0x37, 0x45, 0x62, 0x79, 0x50, 0x50, 0x70, 0x4d, 0x7a, 0x2b, 0x46, 0x52, + 0x46, 0x52, 0x75, 0x41, 0x46, 0x6c, 0x57, 0x4d, 0x74, 0x6d, 0x67, 0x55, + 0x57, 0x47, 0x65, 0x39, 0x55, 0x4f, 0x47, 0x32, 0x5a, 0x32, 0x35, 0x4e, + 0x71, 0x43, 0x77, 0x69, 0x49, 0x6a, 0x52, 0x68, 0x4f, 0x66, 0x35, 0x69, + 0x4b, 0x47, 0x75, 0x7a, 0x53, 0x65, 0x35, 0x50, 0x32, 0x77, 0x31, 0x6c, + 0x61, 0x71, 0x2b, 0x46, 0x6b, 0x52, 0x79, 0x34, 0x70, 0x2b, 0x50, 0x43, + 0x75, 0x56, 0x6b, 0x4a, 0x53, 0x47, 0x6b, 0x7a, 0x54, 0x45, 0x4b, 0x56, + 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, + 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, + 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, + 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2f, 0x2d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2d, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, + 0x61, 0x35, 0x31, 0x32, 0x2d, 0x56, 0x34, 0x61, 0x59, 0x67, 0x38, 0x39, + 0x6a, 0x45, 0x6f, 0x56, 0x52, 0x78, 0x52, 0x62, 0x32, 0x66, 0x4a, 0x64, + 0x41, 0x67, 0x38, 0x46, 0x48, 0x76, 0x49, 0x37, 0x63, 0x45, 0x79, 0x59, + 0x64, 0x56, 0x41, 0x68, 0x39, 0x34, 0x48, 0x48, 0x30, 0x55, 0x49, 0x4b, + 0x38, 0x6f, 0x4a, 0x78, 0x55, 0x66, 0x6b, 0x6a, 0x6c, 0x44, 0x51, 0x4e, + 0x39, 0x52, 0x62, 0x4d, 0x78, 0x2b, 0x62, 0x45, 0x6a, 0x50, 0x37, 0x2b, + 0x67, 0x67, 0x4d, 0x69, 0x46, 0x52, 0x70, 0x72, 0x53, 0x74, 0x69, 0x30, + 0x33, 0x32, 0x4f, 0x69, 0x70, 0x78, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x22, 0x3a, 0x20, 0x7b, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x33, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x2f, 0x2d, 0x2f, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x6d, 0x2d, 0x30, 0x2e, 0x31, + 0x30, 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, - 0x2d, 0x50, 0x51, 0x32, 0x50, 0x43, 0x37, 0x52, 0x39, 0x72, 0x73, 0x6c, - 0x78, 0x38, 0x34, 0x6e, 0x64, 0x4e, 0x42, 0x5a, 0x42, 0x2f, 0x44, 0x6b, - 0x76, 0x38, 0x56, 0x38, 0x66, 0x5a, 0x45, 0x70, 0x6b, 0x38, 0x33, 0x52, - 0x4c, 0x67, 0x58, 0x74, 0x59, 0x64, 0x30, 0x66, 0x77, 0x55, 0x67, 0x45, - 0x6a, 0x73, 0x65, 0x4d, 0x6e, 0x31, 0x44, 0x67, 0x61, 0x6a, 0x68, 0x32, - 0x78, 0x36, 0x53, 0x38, 0x51, 0x62, 0x5a, 0x41, 0x46, 0x61, 0x39, 0x70, - 0x32, 0x71, 0x56, 0x43, 0x45, 0x75, 0x59, 0x5a, 0x4e, 0x67, 0x76, 0x65, - 0x30, 0x64, 0x51, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, + 0x2d, 0x39, 0x41, 0x35, 0x70, 0x71, 0x47, 0x6f, 0x51, 0x6b, 0x34, 0x39, + 0x48, 0x36, 0x56, 0x68, 0x6a, 0x62, 0x39, 0x6b, 0x50, 0x67, 0x41, 0x65, + 0x65, 0x45, 0x43, 0x66, 0x55, 0x44, 0x46, 0x36, 0x61, 0x49, 0x49, 0x43, + 0x62, 0x4d, 0x44, 0x4c, 0x32, 0x33, 0x6b, 0x44, 0x4c, 0x53, 0x74, 0x42, + 0x6e, 0x31, 0x4d, 0x57, 0x6b, 0x33, 0x59, 0x76, 0x63, 0x5a, 0x34, 0x78, + 0x57, 0x46, 0x39, 0x43, 0x73, 0x53, 0x66, 0x36, 0x58, 0x45, 0x67, 0x76, + 0x52, 0x4c, 0x6b, 0x58, 0x79, 0x34, 0x78, 0x6f, 0x66, 0x2f, 0x35, 0x36, + 0x76, 0x56, 0x77, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, + 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, + 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, + 0x22, 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, + 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, + 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, + 0x2f, 0x2d, 0x2f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x31, 0x2e, 0x32, + 0x2e, 0x30, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, + 0x65, 0x39, 0x30, 0x30, 0x6e, 0x4d, 0x38, 0x52, 0x52, 0x74, 0x47, 0x68, + 0x6c, 0x56, 0x33, 0x36, 0x4b, 0x47, 0x45, 0x55, 0x39, 0x6b, 0x36, 0x35, + 0x4b, 0x33, 0x6d, 0x50, 0x62, 0x31, 0x57, 0x56, 0x37, 0x30, 0x4f, 0x64, + 0x6a, 0x66, 0x78, 0x6c, 0x47, 0x32, 0x45, 0x41, 0x75, 0x4d, 0x31, 0x6e, + 0x6f, 0x69, 0x2f, 0x45, 0x2f, 0x42, 0x61, 0x57, 0x2f, 0x75, 0x4d, 0x68, + 0x4c, 0x37, 0x62, 0x50, 0x45, 0x73, 0x73, 0x4b, 0x38, 0x51, 0x56, 0x35, + 0x37, 0x76, 0x4e, 0x33, 0x65, 0x73, 0x69, 0x78, 0x6a, 0x55, 0x76, 0x63, + 0x58, 0x51, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, + 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2f, + 0x2d, 0x2f, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x6e, 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, + 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, + 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x75, 0x45, 0x74, 0x57, 0x6b, 0x46, + 0x4d, 0x2f, 0x73, 0x64, 0x5a, 0x76, 0x52, 0x4e, 0x4e, 0x44, 0x4c, 0x33, + 0x45, 0x68, 0x75, 0x34, 0x57, 0x56, 0x70, 0x77, 0x61, 0x75, 0x6c, 0x68, + 0x77, 0x51, 0x73, 0x7a, 0x56, 0x38, 0x6d, 0x72, 0x74, 0x63, 0x64, 0x65, + 0x45, 0x38, 0x6e, 0x4e, 0x30, 0x30, 0x42, 0x56, 0x39, 0x6d, 0x41, 0x6d, + 0x51, 0x38, 0x38, 0x52, 0x6b, 0x72, 0x42, 0x68, 0x46, 0x67, 0x6c, 0x39, + 0x67, 0x4d, 0x67, 0x76, 0x6a, 0x4a, 0x4c, 0x41, 0x51, 0x63, 0x5a, 0x62, + 0x6e, 0x50, 0x58, 0x49, 0x39, 0x6d, 0x6c, 0x41, 0x3d, 0x3d, 0x22, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, + 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, + 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, + 0x2e, 0x31, 0x34, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, + 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2f, + 0x2d, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2d, 0x31, 0x2e, 0x31, 0x34, + 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, + 0x58, 0x6e, 0x69, 0x33, 0x35, 0x4e, 0x4b, 0x7a, 0x6a, 0x67, 0x4d, 0x72, + 0x77, 0x65, 0x76, 0x79, 0x73, 0x48, 0x54, 0x43, 0x41, 0x72, 0x74, 0x4c, + 0x44, 0x70, 0x50, 0x76, 0x79, 0x65, 0x38, 0x7a, 0x56, 0x2f, 0x30, 0x45, + 0x34, 0x45, 0x79, 0x59, 0x6e, 0x34, 0x33, 0x50, 0x37, 0x2f, 0x37, 0x71, + 0x76, 0x51, 0x77, 0x50, 0x68, 0x39, 0x42, 0x47, 0x6b, 0x48, 0x65, 0x77, + 0x62, 0x4d, 0x75, 0x6c, 0x56, 0x6e, 0x74, 0x62, 0x69, 0x67, 0x6d, 0x63, + 0x54, 0x37, 0x72, 0x64, 0x58, 0x33, 0x42, 0x4e, 0x6f, 0x39, 0x77, 0x52, + 0x4a, 0x67, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x31, + 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x30, 0x2e, + 0x38, 0x2e, 0x31, 0x35, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, + 0x32, 0x2d, 0x50, 0x51, 0x32, 0x50, 0x43, 0x37, 0x52, 0x39, 0x72, 0x73, + 0x6c, 0x78, 0x38, 0x34, 0x6e, 0x64, 0x4e, 0x42, 0x5a, 0x42, 0x2f, 0x44, + 0x6b, 0x76, 0x38, 0x56, 0x38, 0x66, 0x5a, 0x45, 0x70, 0x6b, 0x38, 0x33, + 0x52, 0x4c, 0x67, 0x58, 0x74, 0x59, 0x64, 0x30, 0x66, 0x77, 0x55, 0x67, + 0x45, 0x6a, 0x73, 0x65, 0x4d, 0x6e, 0x31, 0x44, 0x67, 0x61, 0x6a, 0x68, + 0x32, 0x78, 0x36, 0x53, 0x38, 0x51, 0x62, 0x5a, 0x41, 0x46, 0x61, 0x39, + 0x70, 0x32, 0x71, 0x56, 0x43, 0x45, 0x75, 0x59, 0x5a, 0x4e, 0x67, 0x76, + 0x65, 0x30, 0x64, 0x51, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, @@ -1170,763 +1921,28 @@ unsigned char OUTPUT_JS[] = { 0x34, 0x76, 0x73, 0x79, 0x43, 0x47, 0x48, 0x33, 0x4c, 0x70, 0x57, 0x78, 0x71, 0x30, 0x64, 0x4a, 0x52, 0x63, 0x4d, 0x4f, 0x46, 0x6f, 0x56, 0x71, 0x6d, 0x65, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, - 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, - 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, - 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x31, 0x36, 0x2e, 0x39, 0x2e, 0x31, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x2d, - 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x31, 0x36, 0x2e, 0x39, 0x2e, 0x31, - 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x51, 0x70, - 0x4c, 0x63, 0x58, 0x39, 0x5a, 0x53, 0x73, 0x71, 0x33, 0x59, 0x59, 0x55, - 0x55, 0x6e, 0x44, 0x33, 0x6e, 0x46, 0x44, 0x59, 0x38, 0x48, 0x37, 0x77, - 0x63, 0x74, 0x41, 0x68, 0x51, 0x6a, 0x2f, 0x54, 0x46, 0x4b, 0x4c, 0x38, - 0x59, 0x61, 0x38, 0x76, 0x35, 0x66, 0x4d, 0x6d, 0x33, 0x43, 0x46, 0x58, - 0x78, 0x6f, 0x38, 0x7a, 0x53, 0x74, 0x73, 0x4c, 0x41, 0x6c, 0x37, 0x38, - 0x30, 0x6c, 0x74, 0x6f, 0x59, 0x6f, 0x6f, 0x31, 0x57, 0x76, 0x4b, 0x55, - 0x56, 0x47, 0x42, 0x51, 0x4b, 0x2b, 0x31, 0x69, 0x66, 0x72, 0x37, 0x67, - 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7a, - 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, - 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x30, 0x2e, 0x38, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, - 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, - 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x30, 0x2e, 0x38, - 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, - 0x66, 0x62, 0x46, 0x36, 0x6f, 0x54, 0x64, 0x34, 0x73, 0x47, 0x47, 0x79, - 0x30, 0x78, 0x6a, 0x48, 0x50, 0x4b, 0x41, 0x74, 0x2b, 0x65, 0x53, 0x32, - 0x43, 0x72, 0x78, 0x4a, 0x33, 0x2b, 0x36, 0x67, 0x51, 0x33, 0x46, 0x47, - 0x63, 0x42, 0x6f, 0x49, 0x4a, 0x52, 0x32, 0x54, 0x4c, 0x41, 0x79, 0x43, - 0x6b, 0x43, 0x79, 0x49, 0x38, 0x4a, 0x71, 0x5a, 0x4e, 0x79, 0x2b, 0x46, - 0x65, 0x4f, 0x4e, 0x30, 0x41, 0x68, 0x56, 0x67, 0x4e, 0x4a, 0x6f, 0x55, - 0x75, 0x6d, 0x56, 0x6f, 0x5a, 0x51, 0x6a, 0x42, 0x46, 0x55, 0x71, 0x48, - 0x6b, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, 0x34, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x40, - 0x77, 0x72, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x2d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x30, 0x2e, - 0x34, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, - 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, - 0x2d, 0x4c, 0x72, 0x4b, 0x56, 0x4c, 0x6f, 0x76, 0x65, 0x2f, 0x7a, 0x77, - 0x36, 0x68, 0x32, 0x4d, 0x64, 0x2f, 0x4b, 0x5a, 0x79, 0x57, 0x78, 0x49, - 0x6b, 0x46, 0x4d, 0x36, 0x41, 0x6f, 0x79, 0x4b, 0x70, 0x37, 0x31, 0x4f, - 0x71, 0x70, 0x48, 0x39, 0x48, 0x69, 0x69, 0x70, 0x31, 0x63, 0x73, 0x6a, - 0x50, 0x56, 0x6f, 0x44, 0x33, 0x74, 0x50, 0x78, 0x6c, 0x62, 0x51, 0x55, - 0x4e, 0x78, 0x45, 0x6e, 0x48, 0x45, 0x4e, 0x6b, 0x73, 0x33, 0x55, 0x47, - 0x67, 0x4e, 0x70, 0x53, 0x42, 0x43, 0x41, 0x66, 0x71, 0x39, 0x4b, 0x57, - 0x75, 0x61, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x40, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6e, 0x6f, 0x64, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x3e, 0x3d, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, - 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x31, 0x2e, - 0x31, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x2d, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x2d, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x31, 0x2e, 0x74, - 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, - 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6d, 0x77, 0x45, 0x56, - 0x42, 0x44, 0x55, 0x56, 0x4f, 0x44, 0x6c, 0x73, 0x51, 0x51, 0x35, 0x64, - 0x66, 0x75, 0x4c, 0x55, 0x53, 0x35, 0x2f, 0x54, 0x66, 0x37, 0x6a, 0x71, - 0x55, 0x4b, 0x79, 0x68, 0x4b, 0x59, 0x48, 0x6d, 0x56, 0x69, 0x34, 0x66, - 0x50, 0x42, 0x36, 0x62, 0x44, 0x4d, 0x4f, 0x66, 0x57, 0x76, 0x55, 0x50, - 0x4a, 0x6d, 0x4b, 0x67, 0x53, 0x31, 0x5a, 0x37, 0x5a, 0x61, 0x2f, 0x73, - 0x4f, 0x49, 0x33, 0x76, 0x7a, 0x57, 0x74, 0x34, 0x2b, 0x4f, 0x37, 0x79, - 0x43, 0x69, 0x4c, 0x2f, 0x37, 0x30, 0x4d, 0x6f, 0x67, 0x41, 0x3d, 0x3d, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, - 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x22, 0x3a, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x34, 0x2e, - 0x39, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, - 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, - 0x73, 0x74, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x2d, 0x30, 0x2e, 0x34, 0x2e, 0x39, 0x2e, - 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, - 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x30, 0x35, 0x79, - 0x35, 0x42, 0x4b, 0x63, 0x44, 0x61, 0x61, 0x38, 0x77, 0x34, 0x37, 0x66, - 0x38, 0x64, 0x38, 0x31, 0x55, 0x56, 0x77, 0x4b, 0x71, 0x72, 0x41, 0x6a, - 0x6e, 0x38, 0x75, 0x4b, 0x4c, 0x76, 0x36, 0x51, 0x4d, 0x39, 0x66, 0x4e, - 0x64, 0x6c, 0x64, 0x6f, 0x4e, 0x7a, 0x51, 0x2b, 0x72, 0x6e, 0x4f, 0x48, - 0x67, 0x46, 0x6c, 0x6e, 0x72, 0x79, 0x53, 0x55, 0x5a, 0x52, 0x7a, 0x39, - 0x51, 0x49, 0x54, 0x33, 0x76, 0x50, 0x66, 0x74, 0x51, 0x6b, 0x45, 0x7a, - 0x32, 0x55, 0x45, 0x41, 0x53, 0x70, 0x31, 0x4d, 0x69, 0x35, 0x67, 0x3d, - 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x36, - 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x36, 0x2e, - 0x31, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, - 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x36, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, - 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, - 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, - 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, - 0x2e, 0x33, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, - 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x34, 0x2e, - 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, - 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, - 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, - 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, - 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, - 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x31, 0x2e, - 0x33, 0x2e, 0x35, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, - 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, - 0x2d, 0x31, 0x58, 0x6f, 0x44, 0x79, 0x38, 0x6b, 0x4a, 0x6e, 0x79, 0x57, - 0x59, 0x2f, 0x69, 0x2f, 0x2b, 0x67, 0x4c, 0x54, 0x45, 0x62, 0x59, 0x4c, - 0x6e, 0x6f, 0x69, 0x56, 0x74, 0x53, 0x38, 0x79, 0x37, 0x69, 0x6b, 0x42, - 0x72, 0x2f, 0x49, 0x66, 0x6d, 0x4d, 0x4c, 0x34, 0x51, 0x62, 0x2b, 0x43, - 0x4d, 0x37, 0x64, 0x45, 0x45, 0x62, 0x49, 0x55, 0x4f, 0x6a, 0x6e, 0x59, - 0x37, 0x31, 0x36, 0x57, 0x71, 0x6d, 0x5a, 0x2f, 0x55, 0x70, 0x58, 0x49, - 0x78, 0x54, 0x66, 0x4a, 0x73, 0x59, 0x37, 0x72, 0x4d, 0x63, 0x71, 0x69, - 0x43, 0x58, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x31, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, - 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x69, 0x6e, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x2d, 0x31, 0x2e, 0x36, 0x2e, 0x36, 0x2e, 0x74, - 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, - 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x4c, 0x38, 0x70, 0x54, - 0x6f, 0x54, 0x57, 0x2f, 0x2b, 0x58, 0x72, 0x75, 0x32, 0x46, 0x46, 0x41, - 0x68, 0x6b, 0x5a, 0x31, 0x4f, 0x41, 0x39, 0x71, 0x34, 0x56, 0x34, 0x6e, - 0x75, 0x76, 0x66, 0x6f, 0x50, 0x65, 0x63, 0x42, 0x4d, 0x33, 0x34, 0x44, - 0x65, 0x63, 0x41, 0x75, 0x67, 0x55, 0x5a, 0x45, 0x42, 0x68, 0x49, 0x32, - 0x48, 0x6d, 0x70, 0x67, 0x6e, 0x7a, 0x71, 0x32, 0x68, 0x54, 0x4b, 0x5a, - 0x36, 0x30, 0x4c, 0x41, 0x4d, 0x72, 0x6c, 0x71, 0x69, 0x41, 0x53, 0x6d, - 0x30, 0x61, 0x71, 0x41, 0x59, 0x36, 0x46, 0x38, 0x2f, 0x41, 0x3d, 0x3d, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, - 0x6c, 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x73, 0x6d, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, - 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, - 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, - 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x30, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, - 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2d, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x30, 0x2e, 0x74, - 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, - 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6a, 0x69, 0x50, 0x6c, - 0x4d, 0x54, 0x4e, 0x36, 0x2f, 0x35, 0x43, 0x6a, 0x5a, 0x70, 0x4a, 0x4f, - 0x6b, 0x47, 0x65, 0x55, 0x56, 0x30, 0x6d, 0x62, 0x34, 0x7a, 0x78, 0x78, - 0x33, 0x33, 0x75, 0x58, 0x57, 0x64, 0x6a, 0x2f, 0x78, 0x51, 0x43, 0x66, - 0x41, 0x4d, 0x6b, 0x75, 0x4e, 0x41, 0x43, 0x33, 0x48, 0x4e, 0x37, 0x43, - 0x76, 0x59, 0x44, 0x79, 0x4d, 0x48, 0x48, 0x45, 0x7a, 0x6d, 0x63, 0x51, - 0x35, 0x47, 0x56, 0x31, 0x32, 0x4c, 0x73, 0x7a, 0x57, 0x6f, 0x51, 0x2f, - 0x56, 0x6c, 0x78, 0x45, 0x54, 0x32, 0x34, 0x43, 0x74, 0x41, 0x3d, 0x3d, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, - 0x38, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x35, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x79, - 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x30, 0x2e, - 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, - 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, - 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, - 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, - 0x38, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, - 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, - 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, - 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, - 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x31, 0x2e, 0x32, 0x2e, - 0x31, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, - 0x70, 0x36, 0x37, 0x43, 0x4d, 0x45, 0x46, 0x50, 0x37, 0x6b, 0x4f, 0x47, - 0x31, 0x4a, 0x5a, 0x30, 0x5a, 0x6b, 0x59, 0x5a, 0x77, 0x52, 0x44, 0x61, - 0x33, 0x36, 0x39, 0x77, 0x35, 0x50, 0x49, 0x6a, 0x74, 0x4d, 0x6a, 0x76, - 0x72, 0x51, 0x64, 0x2f, 0x48, 0x6e, 0x49, 0x56, 0x38, 0x46, 0x52, 0x73, - 0x48, 0x52, 0x71, 0x4c, 0x71, 0x4b, 0x2b, 0x6f, 0x41, 0x5a, 0x51, 0x6e, - 0x46, 0x61, 0x31, 0x44, 0x44, 0x64, 0x5a, 0x74, 0x4f, 0x74, 0x48, 0x54, - 0x69, 0x2b, 0x61, 0x4d, 0x49, 0x57, 0x36, 0x45, 0x61, 0x74, 0x43, 0x32, - 0x6a, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x33, - 0x2e, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x39, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x32, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, - 0x2e, 0x31, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2f, 0x2d, 0x2f, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x33, - 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6a, 0x41, - 0x5a, 0x4f, 0x4f, 0x61, 0x68, 0x4a, 0x55, 0x36, 0x62, 0x77, 0x53, 0x71, - 0x62, 0x32, 0x5a, 0x79, 0x73, 0x6b, 0x45, 0x4b, 0x31, 0x58, 0x64, 0x67, - 0x55, 0x59, 0x39, 0x6e, 0x6b, 0x6d, 0x65, 0x63, 0x6c, 0x43, 0x72, 0x57, - 0x37, 0x47, 0x64, 0x64, 0x68, 0x31, 0x75, 0x61, 0x73, 0x48, 0x56, 0x71, - 0x6d, 0x6f, 0x59, 0x63, 0x34, 0x43, 0x4b, 0x64, 0x62, 0x30, 0x2f, 0x48, - 0x30, 0x59, 0x31, 0x4a, 0x39, 0x6c, 0x76, 0x61, 0x58, 0x4b, 0x6c, 0x65, - 0x32, 0x57, 0x73, 0x77, 0x2f, 0x5a, 0x78, 0x31, 0x41, 0x79, 0x55, 0x67, - 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, - 0x22, 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, - 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, - 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x22, - 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, - 0x35, 0x2e, 0x31, 0x37, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x2d, 0x2f, - 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x31, 0x2e, 0x35, 0x2e, 0x31, 0x37, 0x2e, - 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, - 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x75, 0x57, 0x63, - 0x71, 0x41, 0x6f, 0x74, 0x62, 0x77, 0x44, 0x45, 0x55, 0x2f, 0x39, 0x2b, - 0x44, 0x6d, 0x39, 0x65, 0x31, 0x2f, 0x63, 0x6c, 0x4f, 0x37, 0x68, 0x54, - 0x42, 0x32, 0x6b, 0x51, 0x2f, 0x39, 0x34, 0x4a, 0x59, 0x63, 0x47, 0x6f, - 0x75, 0x42, 0x56, 0x4c, 0x6a, 0x6f, 0x4b, 0x6d, 0x54, 0x65, 0x4a, 0x54, - 0x55, 0x50, 0x51, 0x4b, 0x63, 0x4a, 0x47, 0x70, 0x50, 0x77, 0x55, 0x6a, - 0x5a, 0x63, 0x53, 0x71, 0x67, 0x59, 0x69, 0x63, 0x62, 0x46, 0x71, 0x51, - 0x53, 0x6f, 0x4a, 0x49, 0x57, 0x30, 0x79, 0x72, 0x46, 0x76, 0x67, 0x3d, - 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, - 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x31, 0x2e, 0x32, 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, - 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, - 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, - 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, - 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x68, - 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x2d, - 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, - 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2d, 0x30, 0x2e, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x74, 0x67, 0x7a, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, - 0x61, 0x35, 0x31, 0x32, 0x2d, 0x32, 0x74, 0x49, 0x68, 0x4f, 0x49, 0x72, - 0x6e, 0x61, 0x46, 0x34, 0x55, 0x62, 0x51, 0x48, 0x66, 0x37, 0x6b, 0x6a, - 0x65, 0x51, 0x41, 0x2f, 0x45, 0x6d, 0x53, 0x6f, 0x72, 0x42, 0x37, 0x2b, - 0x48, 0x79, 0x4a, 0x49, 0x49, 0x72, 0x55, 0x6a, 0x4a, 0x4f, 0x4b, 0x42, - 0x67, 0x6e, 0x58, 0x77, 0x75, 0x65, 0x78, 0x69, 0x38, 0x61, 0x4d, 0x65, - 0x63, 0x52, 0x6c, 0x71, 0x54, 0x49, 0x44, 0x57, 0x63, 0x79, 0x56, 0x58, - 0x43, 0x65, 0x71, 0x4c, 0x68, 0x55, 0x6e, 0x7a, 0x74, 0x4d, 0x61, 0x36, - 0x62, 0x4f, 0x48, 0x2f, 0x6a, 0x54, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x32, - 0x2e, 0x31, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, - 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, - 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x33, 0x2e, 0x34, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x61, - 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x2f, 0x2d, 0x2f, 0x61, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, - 0x2d, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2d, 0x31, - 0x2e, 0x33, 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, - 0x32, 0x2d, 0x70, 0x6b, 0x32, 0x68, 0x69, 0x57, 0x72, 0x43, 0x58, 0x4d, - 0x41, 0x79, 0x32, 0x66, 0x52, 0x50, 0x77, 0x45, 0x79, 0x68, 0x76, 0x6b, - 0x61, 0x2b, 0x6d, 0x71, 0x77, 0x7a, 0x65, 0x50, 0x36, 0x30, 0x4a, 0x72, - 0x31, 0x74, 0x52, 0x59, 0x69, 0x35, 0x78, 0x72, 0x75, 0x2b, 0x33, 0x6b, - 0x6f, 0x39, 0x34, 0x48, 0x49, 0x39, 0x6f, 0x36, 0x6c, 0x4b, 0x30, 0x43, - 0x54, 0x33, 0x33, 0x2f, 0x77, 0x34, 0x52, 0x44, 0x6c, 0x78, 0x57, 0x63, - 0x68, 0x6d, 0x64, 0x68, 0x44, 0x43, 0x72, 0x76, 0x64, 0x72, 0x2b, 0x70, - 0x48, 0x43, 0x69, 0x67, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x31, 0x2e, - 0x32, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x69, 0x66, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x32, 0x2e, 0x30, 0x2e, - 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, - 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, - 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x31, - 0x30, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x33, - 0x2e, 0x31, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x2f, 0x2d, 0x2f, 0x63, 0x72, 0x6f, 0x73, 0x73, - 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2d, 0x33, 0x2e, 0x31, 0x2e, 0x34, - 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x31, 0x65, - 0x41, 0x74, 0x46, 0x57, 0x64, 0x49, 0x75, 0x62, 0x69, 0x36, 0x54, 0x34, - 0x58, 0x50, 0x79, 0x36, 0x65, 0x69, 0x39, 0x69, 0x55, 0x46, 0x6f, 0x4b, - 0x70, 0x55, 0x6b, 0x49, 0x46, 0x39, 0x37, 0x31, 0x51, 0x4c, 0x4e, 0x38, - 0x6c, 0x49, 0x76, 0x76, 0x76, 0x77, 0x75, 0x65, 0x49, 0x36, 0x35, 0x2b, - 0x4e, 0x77, 0x35, 0x68, 0x61, 0x4d, 0x4e, 0x4b, 0x55, 0x77, 0x66, 0x4a, - 0x78, 0x61, 0x62, 0x71, 0x6c, 0x49, 0x49, 0x44, 0x4f, 0x44, 0x4a, 0x4b, - 0x47, 0x72, 0x51, 0x36, 0x36, 0x67, 0x78, 0x43, 0x30, 0x50, 0x62, 0x51, - 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, - 0x64, 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, - 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, - 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x69, 0x66, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x61, - 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, - 0x2f, 0x2d, 0x2f, 0x66, 0x61, 0x73, 0x74, 0x2d, 0x6a, 0x73, 0x6f, 0x6e, - 0x2d, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x69, 0x66, 0x79, 0x2d, 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x2e, - 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, - 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x6c, 0x68, 0x64, - 0x2f, 0x77, 0x46, 0x2b, 0x4c, 0x6b, 0x39, 0x38, 0x48, 0x5a, 0x6f, 0x54, - 0x43, 0x74, 0x6c, 0x56, 0x72, 0x61, 0x48, 0x74, 0x66, 0x68, 0x35, 0x58, - 0x59, 0x69, 0x6a, 0x49, 0x6a, 0x61, 0x6c, 0x58, 0x63, 0x6b, 0x37, 0x73, - 0x61, 0x55, 0x74, 0x75, 0x61, 0x6e, 0x53, 0x44, 0x79, 0x4c, 0x4d, 0x78, - 0x6e, 0x48, 0x68, 0x53, 0x58, 0x45, 0x44, 0x4a, 0x71, 0x48, 0x78, 0x44, - 0x37, 0x6d, 0x73, 0x52, 0x38, 0x44, 0x30, 0x75, 0x43, 0x6d, 0x71, 0x6c, - 0x6b, 0x77, 0x6a, 0x43, 0x56, 0x38, 0x78, 0x76, 0x77, 0x48, 0x77, 0x3d, - 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x35, 0x2e, - 0x35, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2f, - 0x2d, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x31, 0x35, - 0x2e, 0x35, 0x2e, 0x33, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, - 0x32, 0x2d, 0x73, 0x4d, 0x2b, 0x6a, 0x58, 0x61, 0x4f, 0x35, 0x4b, 0x69, - 0x6e, 0x54, 0x75, 0x69, 0x36, 0x6c, 0x62, 0x4b, 0x2f, 0x37, 0x62, 0x37, - 0x48, 0x2f, 0x4b, 0x6e, 0x6a, 0x39, 0x42, 0x70, 0x6a, 0x47, 0x78, 0x5a, - 0x2b, 0x4b, 0x69, 0x33, 0x35, 0x76, 0x37, 0x59, 0x62, 0x55, 0x4a, 0x78, - 0x78, 0x64, 0x42, 0x43, 0x55, 0x71, 0x4e, 0x4d, 0x30, 0x68, 0x33, 0x43, - 0x52, 0x56, 0x55, 0x31, 0x5a, 0x46, 0x39, 0x74, 0x35, 0x6c, 0x4e, 0x69, - 0x42, 0x7a, 0x76, 0x42, 0x43, 0x53, 0x59, 0x50, 0x76, 0x49, 0x77, 0x78, - 0x50, 0x4f, 0x51, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x70, 0x65, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, - 0x74, 0x61, 0x67, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x22, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, - 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x2f, 0x2d, 0x2f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x2d, 0x74, 0x61, 0x67, 0x2d, 0x32, - 0x2e, 0x31, 0x32, 0x2e, 0x35, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, - 0x31, 0x32, 0x2d, 0x35, 0x78, 0x4e, 0x68, 0x50, 0x34, 0x30, 0x36, 0x33, - 0x64, 0x31, 0x36, 0x50, 0x7a, 0x33, 0x48, 0x42, 0x74, 0x4b, 0x70, 0x72, - 0x75, 0x74, 0x73, 0x50, 0x72, 0x6d, 0x48, 0x5a, 0x69, 0x35, 0x49, 0x64, - 0x55, 0x47, 0x4f, 0x57, 0x52, 0x78, 0x41, 0x32, 0x42, 0x36, 0x56, 0x46, - 0x37, 0x42, 0x49, 0x52, 0x47, 0x4f, 0x48, 0x5a, 0x35, 0x57, 0x51, 0x76, - 0x44, 0x6d, 0x4a, 0x58, 0x5a, 0x75, 0x50, 0x63, 0x42, 0x67, 0x37, 0x72, - 0x59, 0x77, 0x61, 0x46, 0x78, 0x76, 0x51, 0x59, 0x6a, 0x71, 0x6b, 0x53, - 0x64, 0x52, 0x33, 0x54, 0x51, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, - 0x5e, 0x32, 0x2e, 0x31, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x2e, - 0x33, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, - 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, 0x6c, 0x69, - 0x62, 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2d, 0x32, 0x2e, - 0x33, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, - 0x61, 0x35, 0x31, 0x32, 0x2d, 0x37, 0x37, 0x45, 0x62, 0x79, 0x50, 0x50, - 0x70, 0x4d, 0x7a, 0x2b, 0x46, 0x52, 0x46, 0x52, 0x75, 0x41, 0x46, 0x6c, - 0x57, 0x4d, 0x74, 0x6d, 0x67, 0x55, 0x57, 0x47, 0x65, 0x39, 0x55, 0x4f, - 0x47, 0x32, 0x5a, 0x32, 0x35, 0x4e, 0x71, 0x43, 0x77, 0x69, 0x49, 0x6a, - 0x52, 0x68, 0x4f, 0x66, 0x35, 0x69, 0x4b, 0x47, 0x75, 0x7a, 0x53, 0x65, - 0x35, 0x50, 0x32, 0x77, 0x31, 0x6c, 0x61, 0x71, 0x2b, 0x46, 0x6b, 0x52, - 0x79, 0x34, 0x70, 0x2b, 0x50, 0x43, 0x75, 0x56, 0x6b, 0x4a, 0x53, 0x47, - 0x6b, 0x7a, 0x54, 0x45, 0x4b, 0x56, 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x2d, 0x66, 0x65, - 0x74, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x22, 0x32, 0x2e, 0x36, 0x2e, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, - 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, - 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2f, 0x2d, 0x2f, 0x6e, 0x6f, 0x64, - 0x65, 0x2d, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2d, 0x32, 0x2e, 0x36, 0x2e, - 0x31, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, - 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x56, - 0x34, 0x61, 0x59, 0x67, 0x38, 0x39, 0x6a, 0x45, 0x6f, 0x56, 0x52, 0x78, - 0x52, 0x62, 0x32, 0x66, 0x4a, 0x64, 0x41, 0x67, 0x38, 0x46, 0x48, 0x76, - 0x49, 0x37, 0x63, 0x45, 0x79, 0x59, 0x64, 0x56, 0x41, 0x68, 0x39, 0x34, - 0x48, 0x48, 0x30, 0x55, 0x49, 0x4b, 0x38, 0x6f, 0x4a, 0x78, 0x55, 0x66, - 0x6b, 0x6a, 0x6c, 0x44, 0x51, 0x4e, 0x39, 0x52, 0x62, 0x4d, 0x78, 0x2b, - 0x62, 0x45, 0x6a, 0x50, 0x37, 0x2b, 0x67, 0x67, 0x4d, 0x69, 0x46, 0x52, - 0x70, 0x72, 0x53, 0x74, 0x69, 0x30, 0x33, 0x32, 0x4f, 0x69, 0x70, 0x78, - 0x77, 0x3d, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, - 0x6d, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, - 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x73, 0x6d, 0x2f, 0x2d, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, - 0x73, 0x6d, 0x2d, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x2e, 0x74, 0x67, - 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, - 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x39, 0x41, 0x35, 0x70, 0x71, - 0x47, 0x6f, 0x51, 0x6b, 0x34, 0x39, 0x48, 0x36, 0x56, 0x68, 0x6a, 0x62, - 0x39, 0x6b, 0x50, 0x67, 0x41, 0x65, 0x65, 0x45, 0x43, 0x66, 0x55, 0x44, - 0x46, 0x36, 0x61, 0x49, 0x49, 0x43, 0x62, 0x4d, 0x44, 0x4c, 0x32, 0x33, - 0x6b, 0x44, 0x4c, 0x53, 0x74, 0x42, 0x6e, 0x31, 0x4d, 0x57, 0x6b, 0x33, - 0x59, 0x76, 0x63, 0x5a, 0x34, 0x78, 0x57, 0x46, 0x39, 0x43, 0x73, 0x53, - 0x66, 0x36, 0x58, 0x45, 0x67, 0x76, 0x52, 0x4c, 0x6b, 0x58, 0x79, 0x34, - 0x78, 0x6f, 0x66, 0x2f, 0x35, 0x36, 0x76, 0x56, 0x77, 0x3d, 0x3d, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x40, 0x77, 0x72, 0x79, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x5e, - 0x30, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x32, 0x2e, 0x30, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, 0x2f, 0x73, 0x79, 0x6d, - 0x62, 0x6f, 0x6c, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, - 0x6c, 0x65, 0x2d, 0x31, 0x2e, 0x32, 0x2e, 0x30, 0x2e, 0x74, 0x67, 0x7a, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, - 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x65, 0x39, 0x30, 0x30, 0x6e, 0x4d, - 0x38, 0x52, 0x52, 0x74, 0x47, 0x68, 0x6c, 0x56, 0x33, 0x36, 0x4b, 0x47, - 0x45, 0x55, 0x39, 0x6b, 0x36, 0x35, 0x4b, 0x33, 0x6d, 0x50, 0x62, 0x31, - 0x57, 0x56, 0x37, 0x30, 0x4f, 0x64, 0x6a, 0x66, 0x78, 0x6c, 0x47, 0x32, - 0x45, 0x41, 0x75, 0x4d, 0x31, 0x6e, 0x6f, 0x69, 0x2f, 0x45, 0x2f, 0x42, - 0x61, 0x57, 0x2f, 0x75, 0x4d, 0x68, 0x4c, 0x37, 0x62, 0x50, 0x45, 0x73, - 0x73, 0x4b, 0x38, 0x51, 0x56, 0x35, 0x37, 0x76, 0x4e, 0x33, 0x65, 0x73, - 0x69, 0x78, 0x6a, 0x55, 0x76, 0x63, 0x58, 0x51, 0x3d, 0x3d, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, - 0x2e, 0x34, 0x2e, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x74, 0x73, 0x2d, 0x69, 0x6e, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x2d, 0x69, - 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2d, 0x30, 0x2e, 0x34, - 0x2e, 0x34, 0x2e, 0x74, 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, - 0x75, 0x45, 0x74, 0x57, 0x6b, 0x46, 0x4d, 0x2f, 0x73, 0x64, 0x5a, 0x76, - 0x52, 0x4e, 0x4e, 0x44, 0x4c, 0x33, 0x45, 0x68, 0x75, 0x34, 0x57, 0x56, - 0x70, 0x77, 0x61, 0x75, 0x6c, 0x68, 0x77, 0x51, 0x73, 0x7a, 0x56, 0x38, - 0x6d, 0x72, 0x74, 0x63, 0x64, 0x65, 0x45, 0x38, 0x6e, 0x4e, 0x30, 0x30, - 0x42, 0x56, 0x39, 0x6d, 0x41, 0x6d, 0x51, 0x38, 0x38, 0x52, 0x6b, 0x72, - 0x42, 0x68, 0x46, 0x67, 0x6c, 0x39, 0x67, 0x4d, 0x67, 0x76, 0x6a, 0x4a, - 0x4c, 0x41, 0x51, 0x63, 0x5a, 0x62, 0x6e, 0x50, 0x58, 0x49, 0x39, 0x6d, - 0x6c, 0x41, 0x3d, 0x3d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, - 0x39, 0x2e, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x31, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x74, 0x73, 0x6c, 0x69, 0x62, 0x2f, 0x2d, 0x2f, 0x74, 0x73, 0x6c, 0x69, - 0x62, 0x2d, 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x31, 0x2e, 0x74, 0x67, 0x7a, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x73, - 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x58, 0x6e, 0x69, 0x33, 0x35, 0x4e, - 0x4b, 0x7a, 0x6a, 0x67, 0x4d, 0x72, 0x77, 0x65, 0x76, 0x79, 0x73, 0x48, - 0x54, 0x43, 0x41, 0x72, 0x74, 0x4c, 0x44, 0x70, 0x50, 0x76, 0x79, 0x65, - 0x38, 0x7a, 0x56, 0x2f, 0x30, 0x45, 0x34, 0x45, 0x79, 0x59, 0x6e, 0x34, - 0x33, 0x50, 0x37, 0x2f, 0x37, 0x71, 0x76, 0x51, 0x77, 0x50, 0x68, 0x39, - 0x42, 0x47, 0x6b, 0x48, 0x65, 0x77, 0x62, 0x4d, 0x75, 0x6c, 0x56, 0x6e, - 0x74, 0x62, 0x69, 0x67, 0x6d, 0x63, 0x54, 0x37, 0x72, 0x64, 0x58, 0x33, - 0x42, 0x4e, 0x6f, 0x39, 0x77, 0x52, 0x4a, 0x67, 0x3d, 0x3d, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, - 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x31, 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x70, - 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x7a, 0x65, 0x6e, 0x2d, - 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x2d, - 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x62, 0x6c, 0x65, 0x2d, 0x30, 0x2e, 0x38, 0x2e, 0x31, 0x35, 0x2e, 0x74, - 0x67, 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, - 0x22, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x50, 0x51, 0x32, 0x50, - 0x43, 0x37, 0x52, 0x39, 0x72, 0x73, 0x6c, 0x78, 0x38, 0x34, 0x6e, 0x64, - 0x4e, 0x42, 0x5a, 0x42, 0x2f, 0x44, 0x6b, 0x76, 0x38, 0x56, 0x38, 0x66, - 0x5a, 0x45, 0x70, 0x6b, 0x38, 0x33, 0x52, 0x4c, 0x67, 0x58, 0x74, 0x59, - 0x64, 0x30, 0x66, 0x77, 0x55, 0x67, 0x45, 0x6a, 0x73, 0x65, 0x4d, 0x6e, - 0x31, 0x44, 0x67, 0x61, 0x6a, 0x68, 0x32, 0x78, 0x36, 0x53, 0x38, 0x51, - 0x62, 0x5a, 0x41, 0x46, 0x61, 0x39, 0x70, 0x32, 0x71, 0x56, 0x43, 0x45, - 0x75, 0x59, 0x5a, 0x4e, 0x67, 0x76, 0x65, 0x30, 0x64, 0x51, 0x3d, 0x3d, - 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x2e, 0x38, 0x2e, 0x32, 0x31, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x6e, 0x70, 0x6d, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x62, 0x6c, 0x65, 0x2d, 0x74, 0x73, 0x2f, 0x2d, 0x2f, 0x7a, 0x65, 0x6e, - 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x2d, - 0x74, 0x73, 0x2d, 0x30, 0x2e, 0x38, 0x2e, 0x32, 0x31, 0x2e, 0x74, 0x67, - 0x7a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, - 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x2d, 0x59, 0x6a, 0x33, 0x79, 0x58, - 0x77, 0x65, 0x52, 0x63, 0x38, 0x4c, 0x64, 0x52, 0x4d, 0x72, 0x43, 0x43, - 0x38, 0x6e, 0x49, 0x63, 0x34, 0x6b, 0x6b, 0x6a, 0x57, 0x65, 0x63, 0x50, - 0x41, 0x55, 0x56, 0x68, 0x30, 0x54, 0x49, 0x30, 0x4f, 0x55, 0x72, 0x57, - 0x58, 0x78, 0x36, 0x61, 0x58, 0x37, 0x39, 0x30, 0x76, 0x4c, 0x63, 0x44, - 0x6c, 0x57, 0x63, 0x61, 0x36, 0x49, 0x34, 0x76, 0x73, 0x79, 0x43, 0x47, - 0x48, 0x33, 0x4c, 0x70, 0x57, 0x78, 0x71, 0x30, 0x64, 0x4a, 0x52, 0x63, - 0x4d, 0x4f, 0x46, 0x6f, 0x56, 0x71, 0x6d, 0x65, 0x67, 0x3d, 0x3d, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x73, 0x6c, 0x69, 0x62, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x31, 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, - 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x26, 0x26, 0x26, 0x0a, - 0x74, 0x65, 0x73, 0x74, 0x2e, 0x6a, 0x73, 0x40, 0x40, 0x40, 0x0a, 0x6c, - 0x65, 0x74, 0x20, 0x69, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, - 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x2e, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x6a, 0x73, 0x27, 0x29, 0x29, 0x28, - 0x29, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x65, 0x73, - 0x74, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x29, - 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, 0x0a, 0x09, 0x6c, 0x65, 0x74, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x20, 0x69, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x73, 0x28, 0x29, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x60, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x60, 0x29, 0x0a, 0x7d, 0x0a, 0x0a, 0x74, 0x65, 0x73, - 0x74, 0x28, 0x29 + 0x2e, 0x39, 0x2e, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x22, 0x7a, 0x65, 0x6e, 0x2d, 0x6f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x5e, 0x30, + 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, + 0x7d, 0x0a, 0x26, 0x26, 0x26, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x6a, + 0x73, 0x40, 0x40, 0x40, 0x0a, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, + 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x28, 0x27, 0x2e, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x6a, 0x73, 0x27, 0x29, 0x29, 0x28, 0x29, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x73, + 0x79, 0x6e, 0x63, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x0a, + 0x0a, 0x09, 0x6c, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x69, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x28, 0x29, 0x0a, + 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, + 0x28, 0x60, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x60, 0x29, 0x0a, + 0x7d, 0x0a, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x28, 0x29 }; -unsigned int OUTPUT_JS_LEN = 23139; +unsigned int OUTPUT_JS_LEN = 23337;