#include <stdio.h>
#include <stdlib.h>
#define MAX 21
#define MAX_ELEM 8
#define SCORE 12
#define NUM_SKATER 4
#define BASE 3.1
typedef struct{
char name[MAX];
int elements;
float baseval[MAX_ELEM];
int score[MAX_ELEM][SCORE];
float total_base;
float tech_score;
float total_score[MAX_ELEM];
}SKATER;
int getData(SKATER skater[NUM_SKATER]);
void calcData(SKATER skater[NUM_SKATER]);
void insertSort(SKATER skater[NUM_SKATER], int num);
void printData(SKATER skater[]);
int main (void)
{
// Global Declarations
SKATER skater[NUM_SKATER];
int num;
int trouble;
// Funtion calls
num = getData(skater);
calcData(skater);
insertSort(skater, NUM_SKATER);
printData(skater);
return 0;
}
/********************************* getData ************************************
Pre:
Post:
*/
int getData(SKATER skater[NUM_SKATER])
{
// LOcal Declarations
FILE* fpIn;
int i = 0;
int k;
int j;
char buffer[256];
// Statements
if((fpIn
= fopen("lab6data.txt","r"))==NULL
) {
}
while(i
< NUM_SKATER
&& fgets(buffer
, sizeof(buffer
), fpIn
)) {
sscanf(buffer
,"%20[^\n]", skater
[i
].
name); for(k = 0; k < MAX_ELEM; k++)
{
if(fgets(buffer
, sizeof(buffer
), fpIn
) != NULL
) {
char *p=buffer;
int n=0;
if(2!=sscanf(p
+=n
,"%d%f%n",&skater
[i
].
elements, &skater
[i
].
baseval[k
],&n
)) for(j = 0; j < SCORE; j++)
{
if( 1!=sscanf(p
+=n
,"%d%n", &skater
[i
].
score[k
][j
],&n
) ) }
}
}
i++;
}
return i;
}
/* ****************************** calcData *******************************
Pre:
Post:
*/
void calcData(SKATER skater[NUM_SKATER])
{
//Local Declaration
int i,j,k;
int smallest, largest;
int temp = 0;
float temp_baseval = 0;
float temp_score = 0;
float total;
//Statements
for(i=0; i< NUM_SKATER; i++)
{
for(j=0; j< MAX_ELEM; j++)
{
smallest = skater[i].score[j][0];
largest = skater[i].score[j][SCORE-1];
for(k=0; k< SCORE; k++)
{
temp += skater[i].score[j][k]; //adds total scores
if(smallest > skater[i].score[j][k])
smallest = skater[i].score[j][k];
else if(largest < skater[i].score[j][k])
largest = skater[i].score[j][k];
}
//total scores minus largest and smallest
total = (float)(temp - (largest+smallest)) / (float)SCORE;
temp = 0;
//calculates result on the basis of baseval <= or > than 3.1
if(skater[i].baseval[j] <= BASE)
{
skater[i].total_score[j] = (float)(.5 * total) + skater[i].baseval[j];
printf("%f", skater
[i
].
total_score); }
else
skater[i].total_score[j] = total + skater[i].baseval[j];
temp_baseval += skater[i].baseval[j]; //sums up baseval
temp_score += skater[i].total_score[j]; //sums up technical score
}
skater[i].tech_score = temp_score;
skater[i].total_base = temp_baseval;
temp_baseval=0;
temp_score=0;
}
return;
}
/* ==================== insertSort ====================
Sorts list using Insertion Sort. Thes list is divided into sorted
and unsorted list. With each pass the first elemnt in unsorted list
is inserted in sortedlist.
Pre SKATER skater is a structure
Post returns sorted structure based on highest technical score
*/
void insertSort(SKATER skater[NUM_SKATER], int num)
{
//Local Declaration
int loc;
SKATER temp;
SKATER *pCurr;
SKATER *pWalk;
SKATER *pLast;
//Statements
for(pCurr = skater + 1, pLast = skater + num-1;
pCurr <= pLast;
pCurr++)
{
loc = 0;
temp = *pCurr;
for(pWalk = pCurr -1;
pWalk >= skater && !loc;)
//compares the tech scores of swimmers
if(temp.tech_score > pWalk->tech_score)
{
*(pWalk+1) = *pWalk;
pWalk--;
}
else
loc = 1;
*(pWalk+1) = temp;
}
return;
}
/* ****************************** printData *******************************8
Pre:
Post:
*/
void printData(SKATER skater[])
{
//Local Declaration
FILE*fpOut;
int i,j,k;
//Statements
if(!(fpOut
=fopen("output.txt", "w"))) printf("CANT OPENT output.txt");
printf("DONE see output.txt\n"); //checks to see if output.txt opens
fprintf(fpOut
,"NAME: LAB#6 EMAIL: \n\n"); fprintf(fpOut
,"EVENT: MEN SHORT PROGRAM\n"); fprintf(fpOut
,"CHIEF ACCOUNTANT: \n\n");
for(i=0; i<NUM_SKATER; i++)
{
fprintf(fpOut
,"SKATER: %s\n\n", skater
[i
].
name); fprintf(fpOut
,"[BASE] [SCORE] [TOTAL]\n"); fprintf(fpOut
,"---------------------------------------------------------------\n"); for(j=0; j<MAX_ELEM; j++)
{
fprintf(fpOut
,"%5.2f ", skater
[i
].
baseval[j
]); for(k=0; k<SCORE; k++)
{
fprintf(fpOut
,"%3d ", skater
[i
].
score[j
][k
]); }
fprintf(fpOut
," %5.2f", skater
[i
].
total_score[j
]); }
fprintf(fpOut
,"---------------------------------------------------------------\n"); fprintf(fpOut
,"Total Base: %5.2f Total Technical Score: %5.2f", skater[i].total_base, skater[i].tech_score);
}
return;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIAojZGVmaW5lIE1BWCAyMQojZGVmaW5lIE1BWF9FTEVNIDgKI2RlZmluZSBTQ09SRSAxMgojZGVmaW5lIE5VTV9TS0FURVIgNAojZGVmaW5lIEJBU0UgMy4xCnR5cGVkZWYgc3RydWN0ewogICAgICAgICAgICAgICAgY2hhciAgbmFtZVtNQVhdOwogICAgICAgICAgICAgICAgaW50ICAgZWxlbWVudHM7CiAgICAgICAgICAgICAgICBmbG9hdCBiYXNldmFsW01BWF9FTEVNXTsKICAgICAgICAgICAgICAgIGludCBzY29yZVtNQVhfRUxFTV1bU0NPUkVdOwogICAgICAgICAgICAgICAgZmxvYXQgdG90YWxfYmFzZTsKICAgICAgICAgICAgICAgIGZsb2F0IHRlY2hfc2NvcmU7CiAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbF9zY29yZVtNQVhfRUxFTV07CiAgICAgICAgICAgICAgfVNLQVRFUjsKIAppbnQgIGdldERhdGEoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSk7CnZvaWQgY2FsY0RhdGEoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSk7CnZvaWQgaW5zZXJ0U29ydChTS0FURVIgc2thdGVyW05VTV9TS0FURVJdLCBpbnQgbnVtKTsKdm9pZCBwcmludERhdGEoU0tBVEVSIHNrYXRlcltdKTsKIAppbnQgbWFpbiAodm9pZCkKewogICAgICAgIC8vIEdsb2JhbCBEZWNsYXJhdGlvbnMKICAgICAgICBTS0FURVIgc2thdGVyW05VTV9TS0FURVJdOwogICAgICAgIGludCBudW07CiAgICAgICAgaW50IHRyb3VibGU7CiAgICAgICAgLy8gRnVudGlvbiBjYWxscwogICAgICAgIG51bSA9IGdldERhdGEoc2thdGVyKTsKICAgICAgICBjYWxjRGF0YShza2F0ZXIpOwogICAgICAgIGluc2VydFNvcnQoc2thdGVyLCBOVU1fU0tBVEVSKTsKICAgICAgICBwcmludERhdGEoc2thdGVyKTsKICAgICAgICByZXR1cm4gMDsKfQogCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogZ2V0RGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKUHJlOgpQb3N0OgoqLwppbnQgZ2V0RGF0YShTS0FURVIgc2thdGVyW05VTV9TS0FURVJdKQp7CiAgICAgICAgLy8gTE9jYWwgRGVjbGFyYXRpb25zCiAgICAgICAgRklMRSogZnBJbjsKICAgICAgICBpbnQgICBpID0gMDsgIAogICAgICAgIGludCAgIGs7CiAgICAgICAgaW50ICAgajsKICAgICAgICBjaGFyICBidWZmZXJbMjU2XTsgCgkJCiAgICAgICAgLy8gU3RhdGVtZW50cwoJCQogICAgICAgIGlmKChmcEluID0gZm9wZW4oImxhYjZkYXRhLnR4dCIsInIiKSk9PU5VTEwpCiAgICAgICAgewogICAgICAgICAgICAgICAgcHJpbnRmKCJGaWxlIG9wZW5pbmcgZXJyb3IiKTsKICAgICAgICAgICAgICAgIHN5c3RlbSgiUEFVU0UiKTsKICAgICAgICAgICAgICAgIGV4aXQoMTAwKTsKICAgICAgICB9CiAgICAKICAgICAgd2hpbGUoaSA8IE5VTV9TS0FURVIgJiYgZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZnBJbikpCgkgIHsgICAgICAgICAgICAgCgkJCSBzc2NhbmYoYnVmZmVyLCIlMjBbXlxuXSIsIHNrYXRlcltpXS5uYW1lKTsgICAgICAgICAgICAgICAgIAoJCQkgZm9yKGsgPSAwOyBrIDwgTUFYX0VMRU07IGsrKykKCQkJIHsgICAgICAgICAgICAgICAgICAgICAKCQkJCWlmKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwSW4pICE9IE5VTEwpCgkJCQl7CgkJCQkJY2hhciAqcD1idWZmZXI7CgkJCQkJaW50IG49MDsgICAgICAgICAgICAgICAgICAKCQkJCQlpZigyIT1zc2NhbmYocCs9biwiJWQlZiVuIiwmc2thdGVyW2ldLmVsZW1lbnRzLCAmc2thdGVyW2ldLmJhc2V2YWxba10sJm4pKSAKCQkJCQkJZXhpdCgxKTsKCQkJCQlmb3IoaiA9IDA7IGogPCBTQ09SRTsgaisrKQoJCQkJCXsKCQkJCQkJaWYoIDEhPXNzY2FuZihwKz1uLCIlZCVuIiwgJnNrYXRlcltpXS5zY29yZVtrXVtqXSwmbikgKQoJCQkJCQlzeXN0ZW0oIlBBVVNFIik7CgkJCQkJCWV4aXQoMSk7CgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaSsrOyAgICAgICAgICAKICAgICB9CiAgICAgICAgIAogICAgICAgIHN5c3RlbSgiUEFVU0UiKTsKICAgICAgICBmY2xvc2UoZnBJbik7CiAKICAgICAgICByZXR1cm4gaTsKfQogCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBjYWxjRGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClByZToKUG9zdDoKKi8Kdm9pZCBjYWxjRGF0YShTS0FURVIgc2thdGVyW05VTV9TS0FURVJdKQp7CiAgICAgICAgLy9Mb2NhbCBEZWNsYXJhdGlvbiAKICAgICAgICBpbnQgaSxqLGs7CiAgICAgICAgaW50IHNtYWxsZXN0LCBsYXJnZXN0OwogICAgICAgIGludCB0ZW1wID0gMDsKICAgICAgICBmbG9hdCB0ZW1wX2Jhc2V2YWwgPSAwOwogICAgICAgIGZsb2F0IHRlbXBfc2NvcmUgPSAwOwogICAgICAgIGZsb2F0IHRvdGFsOwogCi8vU3RhdGVtZW50cwogICAgICAgIGZvcihpPTA7IGk8IE5VTV9TS0FURVI7IGkrKykKICAgICAgICB7ICAgICAgIAogICAgICAgICAgICAgICAgZm9yKGo9MDsgajwgTUFYX0VMRU07IGorKykKICAgICAgICAgICAgICAgIHsgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0ID0gc2thdGVyW2ldLnNjb3JlW2pdWzBdOwogICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXN0ID0gc2thdGVyW2ldLnNjb3JlW2pdW1NDT1JFLTFdOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihrPTA7IGs8IFNDT1JFOyBrKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICs9IHNrYXRlcltpXS5zY29yZVtqXVtrXTsgLy9hZGRzIHRvdGFsIHNjb3JlcwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc21hbGxlc3QgPiBza2F0ZXJbaV0uc2NvcmVbal1ba10pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdCA9IHNrYXRlcltpXS5zY29yZVtqXVtrXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGxhcmdlc3QgPCBza2F0ZXJbaV0uc2NvcmVbal1ba10pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXN0ID0gc2thdGVyW2ldLnNjb3JlW2pdW2tdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgLy90b3RhbCBzY29yZXMgbWludXMgbGFyZ2VzdCBhbmQgc21hbGxlc3QKICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgPSAoZmxvYXQpKHRlbXAgLSAobGFyZ2VzdCtzbWFsbGVzdCkpIC8gKGZsb2F0KVNDT1JFOyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGN1bGF0ZXMgcmVzdWx0IG9uIHRoZSBiYXNpcyBvZiBiYXNldmFsIDw9IG9yID4gdGhhbiAzLjEKICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2thdGVyW2ldLmJhc2V2YWxbal0gPD0gQkFTRSkKCQkJCQkJewogICAgICAgICAgICAgICAgICAgICAgICAgICBza2F0ZXJbaV0udG90YWxfc2NvcmVbal0gPSAoZmxvYXQpKC41ICogdG90YWwpICsgc2thdGVyW2ldLmJhc2V2YWxbal07CgkJCQkJCSAgIHByaW50ZigiJWYiLCBza2F0ZXJbaV0udG90YWxfc2NvcmUpOwoJCQkJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2thdGVyW2ldLnRvdGFsX3Njb3JlW2pdID0gdG90YWwgKyBza2F0ZXJbaV0uYmFzZXZhbFtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfYmFzZXZhbCArPSBza2F0ZXJbaV0uYmFzZXZhbFtqXTsgLy9zdW1zIHVwIGJhc2V2YWwKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9zY29yZSArPSBza2F0ZXJbaV0udG90YWxfc2NvcmVbal07IC8vc3VtcyB1cCB0ZWNobmljYWwgc2NvcmUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2thdGVyW2ldLnRlY2hfc2NvcmUgPSB0ZW1wX3Njb3JlOwogICAgICAgICAgICAgICAgc2thdGVyW2ldLnRvdGFsX2Jhc2UgPSB0ZW1wX2Jhc2V2YWw7CiAKICAgICAgICAgICAgICAgIHRlbXBfYmFzZXZhbD0wOwogICAgICAgICAgICAgICAgdGVtcF9zY29yZT0wOwogICAgICAgIH0KIAogCiAgICAgICAgcmV0dXJuOwp9CiAKLyogICAgICA9PT09PT09PT09PT09PT09PT09PSBpbnNlcnRTb3J0ID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgU29ydHMgbGlzdCB1c2luZyBJbnNlcnRpb24gU29ydC4gVGhlcyBsaXN0IGlzIGRpdmlkZWQgaW50byBzb3J0ZWQgCiAgICAgICAgYW5kIHVuc29ydGVkIGxpc3QuIFdpdGggZWFjaCBwYXNzIHRoZSBmaXJzdCBlbGVtbnQgaW4gdW5zb3J0ZWQgbGlzdAogICAgICAgIGlzIGluc2VydGVkIGluIHNvcnRlZGxpc3QuCiAKICAgICAgICAgICBQcmUgICAgICAgICAgU0tBVEVSIHNrYXRlciBpcyBhIHN0cnVjdHVyZQogICAgICAgICAgIFBvc3QgICAgICAgICByZXR1cm5zIHNvcnRlZCBzdHJ1Y3R1cmUgYmFzZWQgb24gaGlnaGVzdCB0ZWNobmljYWwgc2NvcmUKKi8KIAp2b2lkIGluc2VydFNvcnQoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSwgaW50IG51bSkKewogCi8vTG9jYWwgRGVjbGFyYXRpb24gCiAgICAgICAgaW50IGxvYzsKICAgICAgICBTS0FURVIgdGVtcDsKICAgICAgICBTS0FURVIgKnBDdXJyOwogICAgICAgIFNLQVRFUiAqcFdhbGs7CiAgICAgICAgU0tBVEVSICpwTGFzdDsKIAovL1N0YXRlbWVudHMKICAgICAgICBmb3IocEN1cnIgPSBza2F0ZXIgKyAxLCBwTGFzdCA9IHNrYXRlciArIG51bS0xOyAKICAgICAgICAgICAgICAgIHBDdXJyIDw9IHBMYXN0OwogICAgICAgICAgICAgICAgcEN1cnIrKykKICAgICAgICB7CiAgICAgICAgIGxvYyA9IDA7CiAgICAgICAgIHRlbXAgPSAqcEN1cnI7CiAKICAgICAgICAgZm9yKHBXYWxrID0gcEN1cnIgLTE7IAogICAgICAgICAgICAgICAgIHBXYWxrID49IHNrYXRlciAmJiAhbG9jOykKIAogICAgICAgICAvL2NvbXBhcmVzIHRoZSB0ZWNoIHNjb3JlcyBvZiBzd2ltbWVycwogICAgICAgICBpZih0ZW1wLnRlY2hfc2NvcmUgPiBwV2Fsay0+dGVjaF9zY29yZSkgCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgKihwV2FsaysxKSA9ICpwV2FsazsKICAgICAgICAgICAgICAgICAgICAgICAgIHBXYWxrLS07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbG9jID0gMTsKICAgICAgICAgKihwV2FsaysxKSA9IHRlbXA7CiAgICAgICAgfQogCiAgcmV0dXJuOwp9CiAKLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHByaW50RGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqOApQcmU6ClBvc3Q6CiovCnZvaWQgcHJpbnREYXRhKFNLQVRFUiBza2F0ZXJbXSkKewogICAgICAgIC8vTG9jYWwgRGVjbGFyYXRpb24gCiAgICAgICAgRklMRSpmcE91dDsKICAgICAgICBpbnQgaSxqLGs7CiAgICAgICAgLy9TdGF0ZW1lbnRzCiAgICAgICAgaWYoIShmcE91dD1mb3Blbigib3V0cHV0LnR4dCIsICJ3IikpKQogICAgICAgICAgICAgICAgcHJpbnRmKCJDQU5UIE9QRU5UIG91dHB1dC50eHQiKTsKIAogICAgICAgIHByaW50ZigiQ2FsY3VsYXRpbmcuLi4uLlxuIik7CiAgICAgICAgcHJpbnRmKCJET05FIHNlZSBvdXRwdXQudHh0XG4iKTsgLy9jaGVja3MgdG8gc2VlIGlmIG91dHB1dC50eHQgb3BlbnMKIAogICAgICAgIGZwcmludGYoZnBPdXQsIk5BTUU6ICAgICAgTEFCIzYgICAgICBFTUFJTDogXG5cbiIpOwogICAgICAgIGZwcmludGYoZnBPdXQsIkVWRU5UOiBNRU4gU0hPUlQgUFJPR1JBTVxuIik7CiAgICAgICAgZnByaW50ZihmcE91dCwiQ0hJRUYgQUNDT1VOVEFOVDogXG5cbiIpOwogICAgICAgIAogCiAgICAgICAgZm9yKGk9MDsgaTxOVU1fU0tBVEVSOyBpKyspCiAgICAgICAgICAgeyAgICAKICAgICAgICAgICAgICAgIGZwcmludGYoZnBPdXQsIlNLQVRFUjogJXNcblxuIiwgc2thdGVyW2ldLm5hbWUpOwogICAgICAgICAgICAgICAgZnByaW50ZihmcE91dCwiW0JBU0VdICAgICAgICAgICAgICAgICAgIFtTQ09SRV0gICAgICAgICAgICAgICAgICAgICAgICBbVE9UQUxdXG4iKTsKICAgICAgICAgICAgICAgIGZwcmludGYoZnBPdXQsIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPE1BWF9FTEVNOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnBPdXQsIiU1LjJmICAgIiwgc2thdGVyW2ldLmJhc2V2YWxbal0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGs9MDsgazxTQ09SRTsgaysrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCIlM2QgIiwgc2thdGVyW2ldLnNjb3JlW2pdW2tdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnBPdXQsIiAgJTUuMmYiLCBza2F0ZXJbaV0udG90YWxfc2NvcmVbal0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCJcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZwcmludGYoZnBPdXQsIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCJUb3RhbCBCYXNlOiAlNS4yZiAgICAgICAgICAgICAgICAgIFRvdGFsIFRlY2huaWNhbCBTY29yZTogJTUuMmYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2F0ZXJbaV0udG90YWxfYmFzZSwgc2thdGVyW2ldLnRlY2hfc2NvcmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgZnByaW50ZihmcE91dCwiXG5cblxuIik7CiAgICAgICAgICAgfQogICAgICAgIGZjbG9zZShmcE91dCk7CiAgICAgICAgcmV0dXJuOwp9CiA=