// File: /workspace/github_cpp_makefile_star2_O2/yasz24[P]eau2/src/network/../serialize/deserialize.cpp
// Function: Deserializable::deserialize(char*, KVStore*)
Object* Deserializable::deserialize(char* s, KVStore* kv) {
        String* classString = JSONHelper::getPayloadKey(s);
        char* className = classString->c_str();
        //std::cout << "deserialization class: " << className << "\n";
        String* valueString = JSONHelper::getPayloadValue(s);
        char* valueName = valueString->c_str();
        //figure out correct deserialization method to call...
        if (0 == strncmp(className, "Array", strlen(className))) {
            return new Array(s, kv);
        } else if(0 == strncmp(className, "IntDistributedArray", strlen(className))) {
            return new IntDistributedArray(s, kv);
        } else if(0 == strncmp(className, "FloatDistributedArray", strlen(className))) {
            return new FloatDistributedArray(s, kv);
        } else if(0 == strncmp(className, "DoubleDistributedArray", strlen(className))) {
            return new DoubleDistributedArray(s, kv);
        } else if(0 == strncmp(className, "BoolDistributedArray", strlen(className))) {
            return new BoolDistributedArray(s, kv);
        } else if(0 == strncmp(className, "StringDistributedArray", strlen(className))) {
            return new StringDistributedArray(s, kv);
        } else if(0 == strncmp(className, "DistributedDataFrame", strlen(className))) {
            return new DistributedDataFrame(s, kv);
        } else if(0 == strncmp(className, "DistributedIntColumn", strlen(className))) {
            return new DistributedIntColumn(s, kv);
        } else if(0 == strncmp(className, "DistributedDoubleColumn", strlen(className))) {
            return new DistributedDoubleColumn(s, kv);
        } else if(0 == strncmp(className, "DistributedFloatColumn", strlen(className))) {
            return new DistributedFloatColumn(s, kv);
        } else if(0 == strncmp(className, "DistributedBoolColumn", strlen(className))) {
            return new DistributedBoolColumn(s, kv);
        } else if(0 == strncmp(className, "DistributedStringColumn", strlen(className))) {
            return new DistributedStringColumn(s, kv);
        } else if(0 == strncmp(className,"IntArray", strlen(className))) {
            return new IntArray(s);
        } else if(0 == strncmp(className,"FloatArray", strlen(className))) {
            return new FloatArray(s);
        } else if(0 == strncmp(className,"StringArray", strlen(className))) {
            return new StringArray(s);
        } else if(0 == strncmp(className,"DoubleArray", strlen(className))) {
            return new DoubleArray(s);
        } else if(0 == strncmp(className,"StringColumn", strlen(className))) {
            return new StringColumn(s);
        } else if(0 == strncmp(className,"FloatColumn", strlen(className))) {
            return FloatColumn::deserialize(valueName);
        } else if(0 == strncmp(className,"DoubleColumn", strlen(className))) {
            return DoubleColumn::deserialize(valueName);
        } else if(0 == strncmp(className,"IntColumn", strlen(className))) {
            return new IntColumn(s);
        } else if(0 == strncmp(className,"BoolColumn", strlen(className))) {
            return BoolColumn::deserialize(valueName);
        } else if(0 == strncmp(className, "DataFrame", strlen(className))) {
            return DataFrame::deserialize(valueName);
        } else if(0 == strncmp(className, "Schema", strlen(className))) {
            return new Schema(valueName);
        } else if(0 == strncmp(className, "Array", strlen(className))) {
            return new Array(s);
        } else if(0 == strncmp(className, "Map", strlen(className))) {
            return new Map(s);
        } else if(0 == strncmp(className, "Queue", strlen(className))) {
            return new Queue(s);
        } else if(0 == strncmp(className, "Key", strlen(className))) {
            return new Key(s);
        } else if(0 == strncmp(className, "KeyVal", strlen(className))) {
            return KeyVal::deserialize(valueName);
        } else if(0 == strncmp(className, "Value", strlen(className))) {
            return new Value(s, kv);
        } else if(0 == strncmp(className, "KVStore", strlen(className))) {
            return new KVStore(s);
        } else if(0 == strncmp(className, "Message", strlen(className))) {
            return new Message(s);
        } else if(0 == strncmp(className, "Ack", strlen(className))) {
            return new Ack(s);
        } else if(0 == strncmp(className, "Nack", strlen(className))) {
            return new Nack(s);
        } else if(0 == strncmp(className, "Put", strlen(className))) {
            return new Put(s, kv);
        } else if(0 == strncmp(className, "Reply", strlen(className))) {
            return new Reply(s, kv);
        } else if(0 == strncmp(className, "Get", strlen(className))) {
            return new Get(s);
        } else if(0 == strncmp(className, "WaitAndGet", strlen(className))) {
            return new WaitAndGet(s);
        } else if(0 == strncmp(className, "Status", strlen(className))) {
            return new Status(s);
        } else if(0 == strncmp(className, "Register", strlen(className))) {
            return new Register(s);
        } else if(0 == strncmp(className, "Directory", strlen(className))) {
            return new Directory(s);
        } else {
            std::cout<<"ERROR: Classname picked up: "<<className<<"\n";
        }
        return nullptr;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r15
movq %rsi, %rbx
movq %rsi, %rdi
callq 0x13e80
movq (%rax), %rcx
movq %rax, %rdi
callq *0x30(%rcx)
movq %rax, %r14
movq %rbx, %rdi
callq 0xc014
movq (%rax), %rcx
movq %rax, %rdi
callq *0x30(%rcx)
movq %rax, %r13
movq %r14, %rdi
callq 0x7110
movq %rax, %r12
leaq 0x4fe8(%rip), %rsi      # 0x185c0
movq %r14, %rdi
movq %rax, %rdx
callq 0x7140
testl %eax, %eax
je 0x139fc
leaq 0x5083(%rip), %rsi      # 0x18675
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13a1a
leaq 0x523e(%rip), %rsi      # 0x1884a
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13a38
leaq 0x4f89(%rip), %rsi      # 0x185af
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13a56
leaq 0x5199(%rip), %rsi      # 0x187d9
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13a74
leaq 0x50ba(%rip), %rsi      # 0x18714
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13a92
leaq 0x521c(%rip), %rsi      # 0x18890
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13ab0
leaq 0x4ffb(%rip), %rsi      # 0x18689
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13ace
leaq 0x4f61(%rip), %rsi      # 0x18609
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13aec
leaq 0x519e(%rip), %rsi      # 0x18860
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13b0a
leaq 0x5112(%rip), %rsi      # 0x187ee
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13b28
leaq 0x5035(%rip), %rsi      # 0x1872b
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13b46
leaq 0x4dcc(%rip), %rsi      # 0x184dc
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13b61
leaq 0x506d(%rip), %rsi      # 0x18797
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13b79
leaq 0x4f92(%rip), %rsi      # 0x186d6
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13b91
leaq 0x4d93(%rip), %rsi      # 0x184f1
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13ba9
leaq 0x4fbe(%rip), %rsi      # 0x18736
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13bc1
leaq 0x50d9(%rip), %rsi      # 0x1886b
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13be9
leaq 0x4e68(%rip), %rsi      # 0x18614
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13bff
leaq 0x4ece(%rip), %rsi      # 0x18694
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13c15
leaq 0x5019(%rip), %rsi      # 0x187f9
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13c2d
leaq 0x50a1(%rip), %rsi      # 0x1889b
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13c43
leaq 0x4c27(%rip), %rsi      # 0x1843b
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13c59
leaq 0x4be0(%rip), %rsi      # 0x1840e
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13c74
leaq 0x4b76(%rip), %rsi      # 0x183be
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13c8f
leaq 0x4b48(%rip), %rsi      # 0x183aa
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13caa
leaq 0x4b75(%rip), %rsi      # 0x183f1
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13cc5
leaq 0x4d0e(%rip), %rsi      # 0x185a4
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13cdb
leaq 0x4adc(%rip), %rsi      # 0x1838c
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13cf9
leaq 0x562e(%rip), %rsi      # 0x18ef8
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13d16
leaq 0x519a(%rip), %rsi      # 0x18a7e
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13d31
leaq 0x5184(%rip), %rsi      # 0x18a82
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13d4c
leaq 0x4fc2(%rip), %rsi      # 0x188da
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13d67
leaq 0x4fb3(%rip), %rsi      # 0x188e5
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13d85
leaq 0x4fa6(%rip), %rsi      # 0x188f2
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13da3
leaq 0x4f85(%rip), %rsi      # 0x188eb
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13dbe
leaq 0x5580(%rip), %rsi      # 0x18f00
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13dd9
leaq 0x49a1(%rip), %rsi      # 0x1833b
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13df4
leaq 0x5553(%rip), %rsi      # 0x18f07
movq %r14, %rdi
movq %r12, %rdx
callq 0x7140
testl %eax, %eax
je 0x13e0f
movq 0x115f2(%rip), %rdi     # 0x24fc0
leaq 0x553c(%rip), %rsi      # 0x18f11
callq 0x7240
movq %rax, %rdi
movq %r14, %rsi
callq 0x7240
leaq 0x46fd(%rip), %rsi      # 0x180e9
movq %rax, %rdi
callq 0x7240
xorl %r14d, %r14d
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x160fa
jmp 0x13bd7
pushq $0x70
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1627e
jmp 0x13bd7
pushq $0x70
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1652e
jmp 0x13bd7
pushq $0x70
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x167de
jmp 0x13bd7
pushq $0x70
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x16a8e
jmp 0x13bd7
pushq $0x70
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x16d3e
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x16fee
jmp 0x13bd7
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x170ba
jmp 0x13bd7
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x17144
jmp 0x13bd7
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x171ce
jmp 0x13bd7
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x17258
jmp 0x13bd7
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x172e2
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0xdad2
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x112cc
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0xed42
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0xb998
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x13f08
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r13, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x14040
movq %r13, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x14164
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x14288
jmp 0x13bd7
movq %r13, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x143c0
movq %r13, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x144e4
pushq $0x50
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %r13, %rsi
callq 0x145a2
jmp 0x13bd7
pushq $0x30
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x148e2
jmp 0x13bd7
pushq $0x28
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x14a58
jmp 0x13bd7
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x14b4e
jmp 0x13bd7
movq %r13, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x14c2c
pushq $0x20
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0xbb60
jmp 0x13bd7
movl $0x118, %edi            # imm = 0x118
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x14d94
jmp 0x13bd7
pushq $0x30
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x14efc
jmp 0x13bd7
pushq $0x30
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x15074
jmp 0x13bd7
pushq $0x30
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x151ec
jmp 0x13bd7
pushq $0x40
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1736c
jmp 0x13bd7
pushq $0x38
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x17566
jmp 0x13bd7
pushq $0x38
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x1572c
jmp 0x13bd7
pushq $0x38
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x158e8
jmp 0x13bd7
pushq $0x38
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x15aa4
jmp 0x13bd7
pushq $0x40
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x15c38
jmp 0x13bd7
pushq $0x48
popq %rdi
callq 0x7250
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x15e1e
jmp 0x13bd7
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
jmp 0x13e6c
movq %rax, %rbx
movq %r14, %rdi
callq 0x7220
movq %rbx, %rdi
callq 0x7390
nop